2014-05-01 65 views
0

我有權訪問單核處理器的單處理器虛擬機,併爲其執行日誌記錄。我有以下代碼:單處理器系統上的多線程powershell腳本

$sb = { 
Param($_) 

if($_.CONTROLLER -ne ".xx"){ 
    $posIP = "10." + $_.IP + $_.CONTROLLER 
    if (Test-Connection -ComputerName $posIP -Count 1 -Quiet) { 
     $mapPath = "\\" + $posIP + "\c$" 
     net use $mapPath $password /user:$userName | Out-Null 
     if(Test-Path $mapPath$dataFile) { 
      [xml]$periods = Get-Content $mapPath$dataFile 
      $endDate = $periods.IndataDbf.ingredient.PeriodDetail.PeriodEndDate | select -last 1 
      $output = "$($_.STORE);$endDate" } 
     else { 
      $outPut = $_.STORE + ';' + "$dataFile Not Found" } 
     net use $mapPath /de | Out-Null 
    } 
    else { 
     $outPut = $_.STORE + ';' + "Map FAILED" } 
    Write-Output $OutPut 
} 
} 

Import-Csv $inFile | ForEach-Object { 
while ((Get-Job -State Running).Count -ge 100) { 
    Start-Sleep -Seconds 5; 
} 
Write-Output $_.STORE 
Start-Job -Scriptblock $sb -ArgumentList $_ | Write-Verbose 
Get-Job -State Completed -HasMoreData 1 | Receive-Job | Out-File -Append -FilePath $outLog 
} 
Get-Job | Wait-Job | Receive-Job | Out-File -Append -FilePath $outLog 

其中運行良好,但花費的時間是相同數量的運行沒有Start-Job相同的代碼,只是一個循環。但是,之前的日誌記錄命令使用了BATCH文件,並自動打開了幾十個子命令窗口來處理數據,然後返回,並在一半的時間內運行。使用的代碼是相同的,所以我不明白爲什麼添加更多線程不會使腳本運行得更快。任何人都可以告訴我爲什麼一個BATCH文件程序與幾十個子窗口運行速度很快,可以說是相同的代碼?爲什麼Start-Job命令根本不能提高速度?我認爲它會嘗試同時執行多個線程。

回答