我正在尝试编写一个脚本来比较两个不同位置的两个文件夹的权限。两个位置的文件夹名称都是用户的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'因为它是null。 "
请协助。
答案 0 :(得分:0)
由于我缺少您路径的信息,因此无法重现您的代码,但是我尝试将两个本地文件的ACL与Compare-Object
进行比较。我创建了两个最初具有相同访问权限的文件。如果没有差异,则不返回任何内容。然后,我从第二个文件的权限中删除了我的帐户,并获得了输出。 (我缩短了输出以避免出现水平条。)SideIndicator
用箭头显示了差异所属的对象。
InputObject SideIndicator
----------- -------------
{System.Security.AccessControl.FileSystemAccessRule, System.Security... =>
{System.Security.AccessControl.FileSystemAccessRule, System.Security... <=
我的测试代码:
$ref = Get-Acl -Path .\Desktop\test1.txt
$diff = Get-Acl - Path .\Desktop\test2.txt
Compare-Object -ReferenceObject $ref.Access -DifferenceObject $diff.Access
我选择了Access
属性进行比较。
关于您的错误,请确保使用您期望的信息填充DifferenceObject。