使用 powershell 验证状态列。如果任何状态列包含不合规,则整体状态列需要显示不合规。附加数据供您参考。
尝试以下代码但未获得预期的输出。
$csv = Import-Csv -Path C:\Users\Desktop\DDPC1.csv
$csv | ForEach-Object {
if ($_.Status -eq "Not-Compliant") {
Echo "The system is $($_.Status) in $($_.Parameter)"
}else
{Write-Host "System is Fully compliant in All Parameter"
}
}
如果多个参数不符合要求,输出需要该系统不符合补丁和 GoogleChrome 标准. 但输出低于。
系统完全符合所有参数
系统未符合补丁要求
该系统与 Chrome 不兼容
系统完全符合所有参数
如果符合要求,输出需要该系统完全符合所有参数. 但输出低于。
系统完全符合所有参数
系统完全符合所有参数
系统完全符合所有参数
系统完全符合所有参数
CSV 数据:-
范围 | 版本 | 地位 |
---|---|---|
Windows 11 | 20H2 | 合规 |
修补 | 不适用 | 不合规 |
铬合金 | 10.1 | 不合规 |
全面的 | 不适用 |
答案1
根据示例数据,overall
数据/行似乎不适合 csv 以正确关联。使用逻辑明确省略它似乎更有意义,可以包装额外的逻辑以获得您想要的每个示例输出。
使用arrays
和以及counts
围绕这些条件计数的一些数学运算并省略overall
行以稍微简化以获得您想要的精确结果。
电源外壳
$csv = Import-Csv -Path C:\Users\Desktop\DDPC1.csv;
$cnt = ($csv | ? { $_.Parameter -ne "Overall"}).Count
[array]$noncompliant = $csv | ? { $_.Parameter -ne "Overall"-and $_.Status -eq "Not-Compliant"};
[array]$compliant = $csv | ? { $_.Parameter -ne "Overall"-and $_.Status -eq "Compliant"};
$noncompliant | ForEach-Object {"The system is $($_.Status) in $($_.Parameter)"};
$compliant | ForEach-Object {"The system is $($_.Status) in $($_.Parameter)"};
If($noncompliant.Count -eq 0 -and $compliant.Count -eq $cnt) {"The system is Fully Compliant in all parameter"} Else {"The system is Not-Compliant"};
支持资源
- 在 PowerShell 中计数对象
- 创建和使用 PowerShell 数组
- 哪里对象
'
?
' 符号和 Where 都是 Where-Object 的别名。如果您明确想要运行 Where-Object 命令,请运行 Where-object 或 '?
'