Windows-Server-2012

Windows 文件伺服器遷移 - 沒有信任

  • March 26, 2019

我們即將將文件伺服器 (Windows Server 2012) 從其目前域遷移到新域。

由於我無法控制的問題,將沒有域信任甚至 DNS 轉發器從新域返回到舊域。因此,我需要一種將 ACL 替換為新域中的組和使用者名的方法。組名將相同,但使用者名結構已更改,因此將涉及映射文件。

我在搜尋時找到了 SetACL,但從最初的閱讀中我無法判斷它是否需要訪問這兩個域。如果它需要,那我就不走運了。我真的希望避免在我們的整個文件伺服器上手動重建權限,所以希望有人有一個好的解決方案。

我最終嘗試了我能想到的一切,但從未讓 SetACL 工作。通過使用將舊 SID 映射到新域中的帳戶的映射文件,我能夠讓它執行而沒有錯誤。它實際上說它正在應用 ACL。但它從未真正改變過任何權限。一次手動執行一個時,結果相同。我假設這是因為它無法訪問舊域,所以它只是跳到下一個域。最後,我回到了舊域,並使用了一個 PS 腳本來導出目前的權限。然後對該 CSV 進行快速編輯以將列出的帳戶更改為新帳戶,然後返回新域並執行不同的 PS 腳本來導入和應用權限。

我使用的 Scrips 來自這裡。而且由於我是在移動數據而不是複制它,所以在連結的解決方案中我沒有關於繼承權限的問題。出來完美無瑕。

這是要求的腳本。我做了一個更改,我正在重做文件夾結構(比如從 N:\share 移動到 Z:\public),所以在兩個腳本之間我只是編輯了 CSV 以引用新位置。

ExportPermissions.ps1

$sourceFolder = "E:\sourceFolder"
$exportFile = "C:\outputCSV.csv"

Get-ChildItem $sourceFolder -Recurse | ?{ $_.PsIsContainer } | %{
 $Path = $_.FullName
 # Exclude inherited rights from the report
 (Get-Acl $Path).Access | ?{ !$_.IsInherited } | Select-Object `
   @{n='Path';e={ $Path }}, IdentityReference, AccessControlType, `
   InheritanceFlags, PropagationFlags, FileSystemRights
} | Export-CSV $exportFile

importpermissions.ps1

$par = Import-Csv -Path "c:\outputCSV.csv"

foreach ( $i in $par ) { 
 $path= $i.Path
 $IdentityReference= $i.IdentityReference
 $AccessControlType=$i.AccessControlType
 $InheritanceFlags= $i.InheritanceFlags
 $PropagationFlags=$i.PropagationFlags
 $FileSystemRights=$i.FileSystemRights
 echo $path $IdentityReference
 $acl = Get-Acl $path
 $permission = $IdentityReference, $FileSystemRights, $InheritanceFlags, 
 $PropagationFlags, $AccessControlType
 $accessRule = new-object System.Security.AccessControl.FileSystemAccessRule $permission
 $acl.SetAccessRule($accessRule)
 #$objACE = New-Object System.Security.AccessControl.FileSystemAccessRule ($IdentityReference, $FileSystemRights, $InheritanceFlags, $PropagationFlags, $AccessControlType)
 #$objACL.AddAccessRule($objACE)
 $acl | Set-Acl $path
}

引用自:https://serverfault.com/questions/956281