我正在尝试编写一个powershell脚本,该脚本只返回其中一列中具有特定条目的行,但稍微有点挣扎。 CSV有2个相关列,ID和错误。 目前我有这个:
$ImportFile = Import-csv X:\errorlist.csv
$Error = $userobject.Error
$ID = $userobject.ID
$ErrorMessage1 = "Error1"
foreach($test in $ImportFile)
{
$field1 = $test.Error
$field2 = $test.ID
Echo "$field1, $field2"
} Where-Object {$_.Error -like $ErrorMessage1}
然而,即使使用Where-Object,echo仍会返回csv中的所有内容。 我正在尝试运行ForEach,因为最终我有回声我将插入一个SQL脚本,该脚本使用csv中的ID信息来修复特定错误。因此,我认为我需要让foreach依次处理每个sql脚本,除非有人有更好的想法?
答案 0 :(得分:1)
尝试这种方式,这将检查ID或错误列中的$ ErrorMessage1:
Import-csv X:\errorlist.csv |
Where-Object {$_.Error -like "*$ErrorMessage1*" -or $_.ID -like "*$ErrorMessage1*"}
答案 1 :(得分:0)
foreach
循环独立于Where-object
运行,因此您所做的就是将CSV文件的内容转储到控制台。
只需通过管道抽取数据,就可以大大缩短这一点。这会将您的CSV记录过滤到符合您条件的记录。
$ErrorMessage1 = "Error1"
$allerrors = Import-csv X:\errorlist.csv|where-object {$_.error -eq $ErrorMessage1}
$allerrors;
答案 2 :(得分:0)
在运行SQL之前从CSV中过滤行:
Import-Csv X:\errorlist.csv |
Where-Object { $_.Error -like $ErrorMessage } |
ForEach-Object {
# Don't use aliases in scripts, use the real cmdlet names. Makes maintenance easier.
Write-Host ('{0}, {1}' -f $_.Error,$_.ID)
# Run your SQL cmd here.
}