我的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
}
}
答案 0 :(得分:4)
您可以按用户名对对象进行分组,然后检查每个组是否包含“不正常”状态。
$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
}}
答案 1 :(得分:1)
由于两个If条件,您在foreach内部的验证需要改进。要么是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
}
}