2016-03-07 46 views
0

我想執行CMD命令並將流的結果傳輸到流編寫器。原因是我試圖篩選的日誌文件高達1GB,並將結果存儲到一個變量中,可以輕鬆使用多個內存。由於美麗的表演,我也想出來StreamWriter。執行CMD命令和流CMD結果到StreamWriter

這是我的腳本的摘錄。

$StreamWriter = [System.IO.StreamWriter] "test.txt" 
$SearchString = "2016_06_*" 
$SearchLogs = "2016_*.log" 

"CMD /C gunzip.exe -c $SearchLogs |grep -i `"$SearchString`"" | $StreamWriter.WriteLine($_) 

$StreamWriter.Flush() 
$StreamWriter.Close() 
+0

你的問題到底是什麼?你有錯誤嗎? – RobertKenny

回答

0
  1. 不要混合使用CMD和PowerShell。使用一個或另一個。我已經告訴過你last time
  2. 不要再使用PowerShell v1了。任何仍然受支持的Windows系統至少可以運行PowerShell v2。現在升級。
  3. 您不需要從PowerShell運行可執行文件的CMD。我也告訴過你。
  4. 如果您將命令行放在引號中,PowerShell將簡單地回顯它,而不是執行它。
  5. 對於過濾通配符匹配,請使用-like運算符。
  6. 流寫入器不會從管道中讀取數據。您需要將它們包裝在ForEach-Object聲明中。
$StreamWriter = [IO.StreamWriter]'test.txt' 
$SearchString = "2016_06_*" 
$SearchLogs = "2016_*.log" 

gunzip.exe -c $SearchLogs | 
    Where-Object { $_ -like $SearchString } | 
    ForEach-Object { $StreamWriter.WriteLine($_) } 

$StreamWriter.Flush() 
$StreamWriter.Close()