2013-07-02 31 views
0

我想寫一個powershell腳本,只返回一列中具有特定條目,但掙扎了一下的行。 CSV有2個相關列,ID和錯誤。 目前,我有這樣的:Powershell - 通過CSV搜索,並返回只有特定錯誤的行

$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} 

然而回聲尚處於CSV甚至與位置對象返回的一切。 我試圖運行一個ForEach,因爲最終在那裏我有回聲我要插入一個SQL腳本,它使用csv中的ID信息來修復特定的錯誤。因此,我認爲我需要保持foreach來處理每個sql腳本,除非任何人有更好的主意?

回答

0

過濾器從CSV行運行SQL之前:

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. 
    } 
+0

感謝@splattered bits ....這正是我正在尋找。 –

1

嘗試這種方式,這將在ID或錯誤列檢查$ ErrorMessage1:

Import-csv X:\errorlist.csv | 
Where-Object {$_.Error -like "*$ErrorMessage1*" -or $_.ID -like "*$ErrorMessage1*"} 
+0

我會讓它'般的 「* $ ErrorMessage1 *」'或'$ -eq ErrorMessage1'。 –

+0

謝謝,我想我應該擴大一點,我的最終目標是什麼...我試圖運行一個ForEach,因爲最終我有回聲我要插入一個SQL腳本使用ID在csv中的信息來解決特定的錯誤。因此,我認爲我需要保持foreach來處理每個sql腳本,除非任何人有更好的主意? –

+0

@TimRowsell你可以管道到foreach對象,並在其中使用IF語句。 –

0

foreach循環運行獨立於Where-object,讓你所有你正​​在做的是反傾銷的內容CSV文件到控制檯。

只需通過管道泵送數據,就可以縮短這一點。這會將您的CSV記錄過濾爲符合您標準的記錄。

$ErrorMessage1 = "Error1" 
$allerrors = Import-csv X:\errorlist.csv|where-object {$_.error -eq $ErrorMessage1} 
$allerrors;