我被难住了!
以下是我的需求。我们已经迁移到一个新域,我需要编写一个脚本,在服务器上运行此脚本,该脚本将递归遍历所有目录和文件,并查看每个目录或文件的ACL。如果在ACL中发现“OLDDOMAIN\USER”等内容,则将其替换为“NEWDOMAIN\USER”,但保留所有权限。
以下是我目前的代码:
$access = ""
$accessarray = @()
$filesarray = @()
$permarray = @()
$filesarray = Get-ChildItem C:\Users -Recurse
ForEach($path in $filesarray) {
$pathcheck = $path.fullname
$access = get-acl $pathcheck
$accessarray = $access.AccessToString.Split(",")
foreach ($item in $accessarray) {
if ($item -match "OLDDOMAIN") {
Write-Host $pathcheck
Write-Host $item
$item = $item -replace ("OLDDOMAIN","NEWDOMAIN")
$permarray = $item.split(” “) | where-object {$_ -ne ”“}
foreach($perm in $permarray) {
$ar = New-Object system.security.accesscontrol.filesystemaccessrule $perm
$acl.SetAccessRule($ar)
$acl | Set-Acl $pathcheck
}
}
}
}
这个方法有点可行,但问题在于当重新应用权限时,数组的顺序不正确,并且在set-acl命令失败。
有什么想法吗?我都快被搞疯了 :P
谢谢