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
命令根本不能提高速度?我認爲它會嘗試同時執行多個線程。
我必須在家看看,在某些時候。我的僱主阻止了Box,所以我無法下載代碼來查看它是如何實現的,而且帖子沒有完整列出代碼。 –