Windows 文件服务器迁移 - 无需信任

Windows 文件服务器迁移 - 无需信任

我们即将把我们的文件服务器(Windows Server 2012)从当前域迁移到新域。

由于我无法控制的问题,新域与旧域之间将不存在域信任,甚至不存在 DNS 转发器。因此,我需要一种方法来用新域中的组和用户名替换 ACL。组名将保持不变,但用户名结构已发生改变,因此将涉及一个映射文件。

我发现设置ACL我在搜索时遇到了这个问题,但从最初的阅读来看,我无法判断它是否需要访问两个域。如果需要,那我就倒霉了。我真的希望避免手动重建整个文件服务器的权限,所以希望有人能有一个好的解决方案。

答案1

我最终尝试了所有能想到的方法,但 SetACL 始终无法工作。通过使用将旧 SID 映射到新域中的帐户的映射文件,我能够让它顺利运行。它实际上说它正在应用 ACL。但它从未真正改变任何权限。手动一次执行一次时得到相同的结果。我假设这是因为它无法连接到旧域,所以它只是跳到下一个。最后,我回到旧域并使用 PS 脚本导出当前权限。然后快速编辑该 CSV 以将列出的帐户更改为新帐户,然后返回新域并运行不同的 PS 脚本来导入和应用权限。

我使用的脚本来自这里。由于我是移动数据而不是复制数据,因此在链接的解决方案中没有遇到有关继承权限的问题。结果完美无缺。

这是要求的脚本。我做了一个更改,重新设计了文件夹结构(例如从 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
}

答案2

您可以使用伊卡克尔斯导出和导入您的权限,同时替换任何组/用户。

例子:icacls D:\Main /save Main_Perms.cfg /t /c

如果需要,可以更改保存的文件并使其适应新的用户名。替换特定用户名组只是在 NTFS S-ID 文件中进行批量重命名。

然后你可以将它们导回来:icacls D:\ /restore Main_Perms.cfg /t /c

注意:从文件恢复权限时,您应该指定父目录的路径。

相关内容