比较不同位置的两个文件夹的权限

时间:2015-12-14 16:49:42

标签: powershell permissions compare directory acl

我正在尝试编写一个脚本来比较两个不同位置的两个文件夹的权限。两个位置的文件夹名称都是用户的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。 "

请协助。

1 个答案:

答案 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。