Разделить массив на отдельные объекты на основе уникальных атрибутов - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть массив, который я заполняю другими способами.По сути, он содержит этот пример данных;

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

Это динамически, и я не буду знать, когда массив заполнится, какие данные будут внутри.Мне нужно разделить массив на уникальные массивы (или PSObjects), основанные на PSComputerName.

Так что в этом случае мне понадобится два отдельных объекта / массива для server1 и * 1007.* с учетом того, что может быть 6 серверов или 80 серверов.Я не могу придумать лучший способ приблизиться к этому.

Ответы [ 3 ]

0 голосов
/ 24 апреля 2018

группа-объект . См. «Пример 4: Группировка событий журнала по идентификатору»

0 голосов
/ 24 апреля 2018

Почему бы просто не сгруппировать данные и не работать с каждой группой отдельно? Предполагая, что $objects содержит данные в вопросе

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

Каждый $_.Group будет набором записей, связанных с уникальным компьютером. $_.Name будет pscomputername текущего сгруппированного элемента.

Таким образом, вам может понадобиться еще один внутренний цикл для итерации этих результатов.

0 голосов
/ 24 апреля 2018

Игнорировать, не уверен, почему я бился головой о стену.

$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"

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...