首页 > 解决方案 > 在 PowerShell 中获取特定列

问题描述

我正在创建一个 PowerShell 脚本,其中我有一个 csv 文件,该文件由几个参数组成,其中有一个称为 status 的参数。询问是每当状态为 Fail 时,我想获得相应的行。我正在使用 Import-Csv cmdlet 来获取 csv 文件并检查状态是否失败,并且基于此,我正在使用 split 函数获取相应的详细信息,但是当我使用 split 方法时它给出我的错误为

方法调用失败,因为 [System.Management.Automation.PSCustomObject] 不包含名为“split”的方法。

使用下面的代码

$Report=(Import-Csv "C:\Users\Documents\Optim_Config_Report_20210216170900.csv")

foreach($i in $Report)
{    
    if($i.Status -eq "Fail")
    {
      $RULE_ID= $i.split(',')[0]
      Write-output $RULE_ID
    }
}

有人可以帮我如何获得状态为失败的相应行详细信息吗?

报告是这样的 csv 格式

Rule,Id,Category,Sub_Category,System_Value,Risk,Status
1,Operations,Access,Login,High,Pass
2,Operations,Logging,AccessControl,Medium,Pass
3,Operations,encryptions,certificate,High,Fail,
4,Security,Encryption,protcolo,High,Fail

提前致谢!

标签: powershell

解决方案


当您Import-CSV创建一个 s 数组时[PSCustomObject],每个 s 都有与 CSV 中列的名称相对应的属性。对于您的示例,这些属性将是Rule, ID, Category, Sub_Category, System_Value, Risk, 和Status

从您的示例中不清楚您希望在状态为 的情况下报告哪些信息Fail,但您需要做的就是引用包含该信息的属性 - 例如,如果我想报告Categoryand Sub_Category,我可能会使用

...
if ($i.status -eq "Fail") {
    Write-Host $i.Category, $i.Sub_Category
}
...

对于您的样本数据,这将输出

encryptions certificate
Encryption protcolo


推荐阅读