2012-07-18 27 views
0

我試圖用Start-Job運行一個命令來從某些服務器收集安全日誌。 我解析一個.ini文件來獲得服務器列表,天數等PowerShell多線程開始作業幫助請

#___Collect Logs from Servers___# 

$servList = $iniContent["SERVERS"]["svr"] 
$days = $iniContent["DAYS"]["days"] 
$date = $(get-date -format ddMMyyyy) 
$err = "Error Collecting $($logType) from $($server) or the Event Log is empty! | $(Get-Date -format g) " 
$serv = $servList.Split(",") 


foreach ($server in $serv){ 

$outfile = "D:\DCLogs\$($date)_$($server)_$logType.txt" 
$ScriptBlock = cmd /c "D:\CollectLog\Dumpel.exe -f $($outFile) -l $($logType) -s $($server) -d $($days)" 

    Start-Job -ScriptBlock $ScriptBlock 

    Get-Job | Wait-Job 

    $file = Get-ChildItem D:\DCLogs -Filter "$($date)_$($server)*" -Name 

    $len = $file.length/1KB   # Check LogFile Size 
    if ($len -eq 0){ 
     $errCount = 1 
     write-output $err | Out-File $errLog -append 
        } 
     } 

它一次只能啓動一個工作,所以我知道我做錯了什麼。如果有人能指出這個問題,我將不勝感激。

謝謝。 Amelia

回答

1

Get-Job | Wait-Job在循環中,只是序列化作業。您可以使用循環啓動作業,然後在循環外部使用Get-Job | Wait-Job

嘗試使用來定義你的腳本塊:

$ScriptBlock = {...} 
+0

嗨JPBlanc - 我想的foreach(在$ SERV $服務器){$ OUTFILE =「d:\ DCLogs \ $($日期)_ $($服務器)_ $ logType.txt「$ ScriptBlock = cmd/c」D:\ CollectLog \ Dumpel.exe -f $($ outFile)-l $($ logType)-s $($ server)-d $($ days) 「Start-Job -ScriptBlock $ ScriptBlock} Get-Job |等待作業 - 但它仍然只能同時啓動1個作業 – user1131196 2012-07-18 04:04:05

+0

嘗試使用'{...}來定義您的腳本塊' – JPBlanc 2012-07-18 05:25:24