根据唯一属性将数组拆分为单独的对象

时间:2018-04-24 13:36:23

标签: powershell

我有一个阵列,我通过其他方式填充。它基本上包含此样本数据;

PSComputerName              ResourceName   InstanceName       InDesiredState ConfigurationName StartDate          
--------------              ------------   ------------       -------------- ----------------- ---------          
server1.domain.local WindowsFeature Backup             True           BaseConfig        24/04/2018 14:31:23
server1.domain.local Registry       fDenyTSConnections True           BaseConfig        24/04/2018 14:31:23
server1.domain.local Registry       UserAuthentication True           BaseConfig        24/04/2018 14:31:23
server1.domain.local File           DscDemo            True           BaseConfig        24/04/2018 14:31:23
server5.domain.local WindowsFeature Backup             True           BaseConfig        24/04/2018 14:31:23
server5.domain.local Registry       fDenyTSConnections True           BaseConfig        24/04/2018 14:31:24
server5.domain.local Registry       UserAuthentication True           BaseConfig        24/04/2018 14:31:24

这是动态的,我不知道数组何时填充了内部数据。我需要将数组拆分为基于PSComputerName的唯一数组(或PSObjects)。

因此,在这种情况下,我需要为server1server5提供两个单独的对象/数组,同时要记住可能有6台服务器或80台服务器。我无法想到解决这个问题的最佳方法。

3 个答案:

答案 0 :(得分:4)

为什么不将数据分组并分别处理每个组?假设$objects包含问题中的数据

$objects | Group-Object pscomputername | Foreach-object{
    $_.Group
}

每个$_.Group都是与唯一计算机关联的条目集合。 $_.Name将是当前分组项的pscomputername。

所以你可能需要另外一个内部循环来迭代这些结果。

答案 1 :(得分:0)

忽略,不知道为什么我把头撞在墙上。

$Servers = $CSV.PSComputerName | select -Unique

ForEach($server in $Servers){

    $arr = $CSV | Where-Object {$_.PSComputerName -eq $server}

    Write-Host "Compliancy for $Server"
    $arr
    Write-Host "End compliancy for $server"

}

答案 2 :(得分:0)

group-object。请参阅"示例4:按ID"

分组事件日志事件