使用 powershell 验证特定列及其值

使用 powershell 验证特定列及其值

使用 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"};

支持资源

相关内容