Powershell获得数组第一列的唯一条目

时间:2019-03-07 15:34:03

标签: powershell scripting

我正试图通过读取文件权限来获得唯一条目。

我得到了以下代码片段。它为我提供了一个包含2个数组,一个Identityreference和一个FileSystemRights的列表。

$ACLFile = Get-Acl -Path $dir -Filter Access | Select-Object -ExpandProperty Access | Where-Object {$_.IdentityReference -like "EBK\*"} | Select-Object IdentityReference, FileSystemRights
$ACLFile = $ACLFile.IdentityReference | select -unique

现在我在这里所做的事情仅给了我IdentityReference的结果,但是我需要两者。如果我删除$ACLFile.IdentityReference并只写$ACLLFile,它将删除FileSystemRights列中的重复项,但我只希望将另一列用作指示符。

1 个答案:

答案 0 :(得分:1)

您可以在此处使用Sort-Object

$ACLFile | Sort-Object IdentityReference -unique

但是,仅此方法存在一些问题。您将失去重复的FileSystemRights的其他IdentityReference属性值。您是否想将属于同一FileSystemRights的所有IdentityReference合并为一行?

以下内容将删除重复的IdentityReferences并合并FileSystemRights

$ACLGroup = $ACLFile | Group-Object IdentityReference
$Singles = $ACLGroup.where({$_.count -eq 1}).group
$Duplicates = $ACLGroup.where({$_.count -gt 1})
$ItemizedDuplicates = $Duplicates | foreach {
    [pscustomobject][ordered]@{"IdentityReference"=$_.Group.IdentityReference[0]; "FileSystemRights" = $_.Group.FileSystemRights -join ", "}
}
@($ItemizedDuplicates,$Singles)