0

我正在尝试编写一个 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,回声仍会返回 csv 中的所有内容。我正在尝试运行 ForEach,因为最终我将在回声中插入一个 SQL 脚本,该脚本使用 csv 中的 ID 信息来修复特定错误。因此我认为我需要让 foreach 依次处理每个 sql 脚本,除非有人有更好的主意?

4

3 回答 3

1

尝试这种方式,这将检查 ID 或错误列中的 $ErrorMessage1:

Import-csv X:\errorlist.csv | 
Where-Object {$_.Error -like "*$ErrorMessage1*" -or $_.ID -like "*$ErrorMessage1*"}
于 2013-07-02T12:53:37.297 回答
0

foreach循环独立于 . 运行,Where-object因此您所做的只是将 CSV 文件的内容转储到控制台。

您可以通过将数据泵入管道来缩短很多时间。这会将您的 CSV 记录过滤为仅符合您条件的记录。

$ErrorMessage1 = "Error1"
$allerrors = Import-csv X:\errorlist.csv|where-object {$_.error -eq $ErrorMessage1}
$allerrors;
于 2013-07-02T12:55:21.873 回答
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.
    }
于 2013-07-02T20:26:09.060 回答