2016-11-18

Microsoft VDI User Profile Disk ACL Fix

User Profile Disk 如果有需要更換存放的 File Server
將檔案以複製的方式遷移後, 需要修改檔案的權限
除了基礎結構中 Share / NTFS Permission 一定要給的 Computer Account 等以外
還必須給予該 User Profile Disk 所屬 User Account Full Control 的權限
這個權限在 User 第一次正常登入時會自動設定
但因為檔案複製的關係, 所以這個權限會遺失, 需要手動加進去

如果每個檔案要一個一個去加權限就太累了, 萬一 User Profile Disk 有數百個不就昏倒
因此以 Power Shell Script 代勞來處理這件事情
以下為程式碼, 依需求輸入要處理的 User Profile Disk Path ($UPDPath)

===== 程式開始 =====
clear write-host write-host $UPDPath = Read-Host -Prompt ' Input User Profile Disk Path' $UPD = Get-ChildItem -Path $UPDPath | Where-Object {$_.Name -like "UVHD-S*"} | select name

$colRights = [System.Security.AccessControl.FileSystemRights]"FullControl"
$InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::None
$PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None
$objType =[System.Security.AccessControl.AccessControlType]::Allow

$UPD | foreach {
$UPDFileName = $_.Name
$SIDTrim = $_.Name -replace "UVHD-", "";
$SID = $SIDTrim -replace ".vhdx", "";
$SID_Obj = New-Object System.Security.Principal.SecurityIdentifier($SID)
$HF_ace = New-Object System.Security.AccessControl.FileSystemAccessRule($SID_Obj, $colRights, $InheritanceFlag, $PropagationFlag, $objType)

$ACL = Get-ACL "$UPDPath\$UPDFileName"
$ACL.AddAccessRule($HF_ace)
Set-Acl -Path "$UPDPath\$UPDFileName" -AclObject $ACL
}

===== 程式結束 =====

沒有留言: