我正在将 AD 服务器上一个 (1 TB) 卷(不是 C:)中的所有数据迁移到一个新的 4 TB 卷。我已复制了所有数据,包括 FolderRedirection 和 Profile 内容。
我正在使用一些 PowerShell 克隆安全 ACL。有人能告诉我如何将输出记录到文件中,以便我可以查看它并确保没有写入失败吗?
复制权限.ps1
dir E:\Data -r | where {$_.PSIsContainer} | foreach {
$target= ($_.fullname).replace("E:","G:")
Get-Acl $_.Fullname | Set-Acl $target
}
在 Set-Acl 命令末尾使用 -whatif 标志表明它将尝试执行我想要的操作,但是当我实际在测试文件夹上运行它时,并非所有内容都被复制,并且我在控制台上收到几个错误,如下所示:
Set-Acl:安全标识符不允许成为此对象的所有者。
在 E:\copypermissions.ps1:3 char:32 + Get-Acl $_.Fullname | Set-Acl <<<< $target + CategoryInfo : InvalidOperation: (G:\Data\Profiles*用户名*:String)[Set-Acl],InvalidOperationException + FullyQualifiedErrorId:System.InvalidOperationException,Microsoft.PowerShell.Commands.SetAclCommand
我确实正在寻找一个简单的 1 行代码添加到脚本末尾,将任何错误写入日志文件。
答案1
重定向只是错误从到stederror
常规输出流,放在2> (filename)
查询的末尾。因此它变成:
dir E:\Data -r | where {$_.PSIsContainer} | foreach {
$target= ($_.fullname).replace("E:","G:")
Get-Acl $_.Fullname | Set-Acl $target
} 2> errors.txt
答案2
Robocopy 是 Windows 最新版本附带的复制实用程序(以前是需要下载的资源工具包工具)。当启用某些开关时,它将复制您的文件和 ACL。
要将整个文件夹树安全地从旧驱动器复制到新驱动器,您需要以管理员权限从命令提示符或 powershell 窗口运行以下命令:
Robocopy \\source \\destination /MIR /SEC /ZB
您还可以以仅对文件应用安全性而不复制数据的方式运行 Robocopy。
Robocopy \\source \\destination /SECFIX
要获取有关 Robocopy 的更多信息,您可以查看以下来源: http://ss64.com/nt/robocopy.html- Robocopy 命令行开关说明 http://support.microsoft.com/kb/323275- /SECFIX 开关说明
答案3
使用 Robocopy(非资源套件版本),您可以遵循本指南。
正确的语法是ROBOCOPY /E /Copy:S /IS /IT <Source> <Target>
。