.
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Change the location of the each user folder using SHSetKnownFolderPath function
|
||||
|
||||
.EXAMPLE
|
||||
Set-UserShellFolder -UserFolder Desktop -Path "$env:SystemDrive:\Desktop"
|
||||
|
||||
.LINK
|
||||
https://learn.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shgetknownfolderpath
|
||||
|
||||
.NOTES
|
||||
User files or folders won't be moved to a new location
|
||||
#>
|
||||
function Global:Set-UserShellFolder
|
||||
{
|
||||
[CmdletBinding()]
|
||||
param
|
||||
(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[ValidateSet("Desktop", "Documents", "Downloads", "Music", "Pictures", "Videos")]
|
||||
[string]
|
||||
$UserFolder,
|
||||
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]
|
||||
$Path
|
||||
)
|
||||
|
||||
# Get current user folder path
|
||||
$CurrentUserFolderPath = Get-ItemPropertyValue -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name $UserFolderRegistry[$UserFolder]
|
||||
if ($CurrentUserFolder -ne $Path)
|
||||
{
|
||||
if (-not (Test-Path -Path $Path))
|
||||
{
|
||||
New-Item -Path $Path -ItemType Directory -Force
|
||||
}
|
||||
|
||||
Remove-Item -Path "$CurrentUserFolderPath\desktop.ini" -Force -ErrorAction Ignore
|
||||
|
||||
# Redirect user folder to a new location
|
||||
Set-KnownFolderPath -KnownFolder $UserFolder -Path $Path
|
||||
New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name $UserFolderGUIDs[$UserFolder] -PropertyType ExpandString -Value $Path -Force
|
||||
|
||||
# Save desktop.ini in the UTF-16 LE encoding
|
||||
Set-Content -Path "$Path\desktop.ini" -Value $DesktopINI[$UserFolder] -Encoding Unicode -Force
|
||||
(Get-Item -Path "$Path\desktop.ini" -Force).Attributes = "Hidden", "System", "Archive"
|
||||
(Get-Item -Path "$Path\desktop.ini" -Force).Refresh()
|
||||
|
||||
# Warn user is some files left in an old folder
|
||||
if ((Get-ChildItem -Path $CurrentUserFolderPath -ErrorAction Ignore | Measure-Object).Count -ne 0)
|
||||
{
|
||||
Write-Warning -Message ($Localization.UserShellFolderNotEmpty -f $CurrentUserFolderPath)
|
||||
Write-Error -Message ($Localization.UserShellFolderNotEmpty -f $CurrentUserFolderPath) -ErrorAction SilentlyContinue
|
||||
Write-Information -MessageData "" -InformationAction Continue
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user