Powershell - 搜索CSV并仅返回具有特定错误的行

时间:2013-07-02 12:48:16

标签: powershell

我正在尝试编写一个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脚本,除非有人有更好的想法?

3 个答案:

答案 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.
    }