0

I'm trying to use Start-Job to run a command to collect security logs from some servers. I'm parsing a .ini file to get the list of servers, number of days etc.

#___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
                    }
        }

It's only starting one job at a time so I know I'm doing something wrong. If someone could please point out the problem I'd greatly appreciate it.

Thank you. Amelia

user1131196
  • 77
  • 1
  • 3
  • 12

1 Answers1

1

Get-Job | Wait-Job in the loop, just serialize the jobs. You can use the loop to start the jobs and then use Get-Job | Wait-Job outside the loop.

Try to define your ScriptBlock using :

$ScriptBlock = {...}
JPBlanc
  • 70,406
  • 17
  • 130
  • 175
  • Hi JPBlanc - I tried 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 - but it still only starts 1 job at a time – user1131196 Jul 18 '12 at 04:04
  • Try to define your scriptblock using `{ ... }` – JPBlanc Jul 18 '12 at 05:25