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

Powershell 比较位于不同位置的两个文件夹的权限,powershell,permissions,compare,directory,acl,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).Acce

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

比较对象:无法将参数绑定到参数“DifferenceObject”,因为它为空。 "


请协助。

由于我缺少有关您路径的信息,我无法复制您的代码,但我尝试使用
比较对象
比较两个本地文件的ACL。我创建了两个最初具有相同访问权限的文件。如果没有差异,则不返回任何内容。我从第二个文件的权限中删除了我的帐户,并获得了输出。(我缩短了输出以避免出现水平条。)
SideIndicator
用箭头显示差异所属的对象

InputObject                                                              SideIndicator
-----------                                                              -------------
{System.Security.AccessControl.FileSystemAccessRule, System.Security...  =>
{System.Security.AccessControl.FileSystemAccessRule, System.Security...  <=
我选择了
Access
属性进行比较


关于您的错误,请确保DifferenceObject中填充了您期望的信息

过滤身份引用后,
$Dest
是否确实包含任何内容?是的,当我单独运行它时会包含任何内容。源和目标都包含一组相同的文件夹,需要按顺序对它们进行比较。我的代码是这样做的吗?像“*$nameX*”过滤器这样的
$\ IdentityReference是什么?此外,循环只剩下
$sourcepathX
中最后一个文件夹的ACL。这是故意的吗?在环境中,文件夹名和ADID是相同的。将文件夹名称保存到变量$name,并检查同一ADID是否有权访问该文件夹。第二个不是故意的。我编写这个脚本是为了在迁移过程中比较源和目标的权限。假设正在迁移文件夹XX111,我只想在删除源文件夹之前比较目标文件夹与源文件夹是否具有相同的访问权限。但是上面的代码是我能写的最好的。有什么帮助吗?。
$ref = Get-Acl -Path .\Desktop\test1.txt
$diff = Get-Acl - Path .\Desktop\test2.txt

Compare-Object -ReferenceObject $ref.Access -DifferenceObject $diff.Access