【发布时间】:2016-03-20 06:00:12
【问题描述】:
我正在尝试编写一个脚本来比较两个不同位置的两个文件夹的权限。两个位置的文件夹名称都是用户的 ADID,一些用户可能有两个或多个 AD 帐户。
$OutPath = ".\out1.csv"
$sourcepath1 = Get-Content ".\mwd_src.txt"
foreach ($path1 in $sourcepath1) {
$name1 = (Get-Item $Path1).name
$FolderAcl1 = (Get-Acl $Path1).Access | Select-Object IdentityReference
$Source = $FolderAcl1 | Where-Object { $_.IdentityReference -like "*$name1*"} |
Select-Object @{ Label = "Path"; Expression = { echo $Path1 } }, @{ Label = "Access"; Expression = { $_.IdentityReference } }
}
$sourcepath2 = Get-Content ".\mwd_dest.txt"
foreach ($path2 in $sourcepath2) {
$name2 = (Get-Item $Path2).Name
$FolderAcl2 = (Get-Acl $Path2).Access | Select-Object IdentityReference
$Dest = $FolderAcl2 | Where-Object { $_.IdentityReference -like "*$name2*" } |
Select-Object @{ Label = "Path"; Expression = { echo $Path2 } }, @{ Label = "Access"; Expression = { $_.IdentityReference } }
}
$Source1 = $Source | Select-Object -Unique
$Dest1 = $Dest | Select-Object -Unique
$Out = Compare-Object -ReferenceObject $Source1 -DifferenceObject $Dest1
$Out1 = $Out | Where-Object { $_.SideIndicator -match "=>" }
foreach($OutItem in $Out1) {
$Outitem.InputObject | Add-Content $OutPath
}
但出现以下错误
“Compare-Object:无法将参数绑定到参数'DifferenceObject',因为它为空。 "
请帮忙。
【问题讨论】:
-
在过滤身份引用后,
$Dest是否真的包含任何内容? -
是的,当我单独运行它时。源和目标都包含一组相同的文件夹,并且都需要按顺序进行比较。我的代码正确吗?
-
$_.IdentityReference -like "*$nameX*"过滤器有什么用?此外,您的循环只留下来自$sourcepathX的最后一个文件夹的 ACL。这是故意的吗? -
在环境中,文件夹名称和ADID相同。将文件夹名称保存到变量 $name 并检查相同的 ADID 是否有权访问该文件夹。第二个不是故意的。我正在编写这个脚本来比较迁移期间源和目标的权限。假设正在迁移文件夹 XX111,我只想比较目标文件夹是否与源文件夹具有相同的访问权限,然后再删除源文件夹。但上面的代码是我能写的最好的。对此有什么帮助吗?。
标签: powershell permissions compare directory acl