объединение объектов из массива в PowerShell - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть небольшой блок с частью моего скрипта PowerShell.

У меня есть массив, который содержит адреса электронной почты пользователей и их состояние соответствия.Один и тот же пользователь может иметь несколько записей в массиве, как в нескольких политиках.

Например:

Username: User1, State: OK
Username: User1, State: Not OK
Username: User1, State: OK
Username: User 2, State: OK
Username: User 2, State: OK

Что мне нужно сделать, это объединить все записи для каждого пользователя и затем вывести их общее состояние на экран.Если все состояния OK, сообщите OK, но если Not OK находится в каком-либо из их состояний, сообщите Not OK.Например:

User 1 - Not OK
User 2 - OK

Любое руководство приветствуется.Ниже мой код:

foreach ($Listing in $FullProtectionStatus) {
    if ($listing.state -eq "compliant") {
        Write-Host $Listing.userPrincipalName "compliant"
    }
    if ($Listing.state -eq "non compliant") {
        Write-Host $Listing.userPrincipalName "not compliant" -ForegroundColor Red
    }
}

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Вы можете сгруппировать объекты по имени пользователя, а затем проверить, содержит ли каждая группа состояние «Не в порядке».

$FullProtectionStatus |
    Select-Object Username, State -Unique |
    Group-Object Username |
    Select-Object @{n='Username';e={$_.Name}}, @{n='State';e={
        $_.Group |
            Select-Object -Expand State |
            Sort-Object |
            Select-Object -First 1
    }}
0 голосов
/ 26 февраля 2019

Ваша проверка внутри foreach нуждается в улучшении из-за двух условий If.Либо будет условие else, либо elseif.Кроме того, итерируйте каждого пользователя и проанализируйте условия.

ForEach($Listing in $FullProtectionStatus) 
{ 
    If($listing.state -eq "compliant") 
    { 
    Write-host $Listing.userPrincipalName "compliant" 
    } 
    elseif($Listing.state -eq "non compliant") 
    { 
    Write-host $Listing.userPrincipalName "not compliant" -ForegroundColor Red 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...