powershell - 在 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
提前致谢!
解决方案
当您Import-CSV
创建一个 s 数组时[PSCustomObject]
,每个 s 都有与 CSV 中列的名称相对应的属性。对于您的示例,这些属性将是Rule
, ID
, Category
, Sub_Category
, System_Value
, Risk
, 和Status
。
从您的示例中不清楚您希望在状态为 的情况下报告哪些信息Fail
,但您需要做的就是引用包含该信息的属性 - 例如,如果我想报告Category
and Sub_Category
,我可能会使用
...
if ($i.status -eq "Fail") {
Write-Host $i.Category, $i.Sub_Category
}
...
对于您的样本数据,这将输出
encryptions certificate
Encryption protcolo