我很好奇,如果你能回答這個問題或指向正確的方向。有限的powershell開始工作
我寫了一個測試/監控網址的腳本。我沒有發佈代碼(除非你想要我),因爲代碼中沒有錯誤。它效果很好。我甚至可以將scriptblock作爲開始工作的一部分運行。我所遇到的問題似乎是,我不能在時間上運行超過三份工作......或者他們掛了。我不確定這是爲什麼。我可以運行它共15個網站扼殺到3,這是偉大的。如果我嘗試在15個網址上運行它,並將其作爲我的運行限制,它們將會掛起......並且我一次可以殺死一個......直到剩下3個,並且這些將完成。因此,我似乎只能啓動總共3個PowerShell實例或掛起。任何人都解釋爲什麼這是?我所有的搜索都會將我引向顯示如何加油的頁面,這不是我的問題。
看着眼前的進程,每個進程消耗約的內存25MBs和坐在那裏閒置......如果我殺了一個,其他3將開始使用CPU和工藝上的內存也許30MBs和終止完成。系統擁有8GB內存&四核電纜I5-2400 CPU @ 3.10GHz。根據要求...
Param(
$file
)
$testscript =
{
Param(
[string]$url,
#[ValidateSet('InternetExplorer','Chrome','Firefox','Safari','Opera', IgnoreCase = $true)]
[string]$browser="InternetExplorer",
[string]$teststring="Solution Center",
[int]$timeout=20,
[int]$retry
)
$i=0
do {
$userAgent = [Microsoft.PowerShell.Commands.PSUserAgent]::$browser
$data = Invoke-WebRequest $url -UserAgent $userAgent -TimeoutSec $timeout
$data.Content
$findit = $data.Content.Contains($teststring)
$i++
If ($findit){
break
}
}
while ($i -lt $retry)
if(!$findit) {
Echo "opcmsg a=PSURLCheck o=NHTSA msg_t='$teststring was not found on $url or $url failed to load'"
}
}
$urls = Import-Csv $file | % {
Start-Job -ScriptBlock $testscript -ArgumentList $_.url, $_.browser, $_.teststring, $_.retry
}
While (@(Get-Job | Where { $_.State -eq "Running" }).Count -ne 0)
{ Write-Host "Processing URLs..."
Get-Job
Start-Sleep -Seconds 5
}
$Data = ForEach ($Job in (Get-Job)) {
Receive-Job $Job
Remove-Job $Job
}
$data | select *
所以我用新system.net.webclient,我甚至已經試過[System.Collections.Queue]這樣做......但所有這三種方法使用喬布斯......所以它看起來..我不能在任何時候運行超過三個開始工作。
根據你的要求更新 – 2014-11-21 01:43:13
你是什麼意思,通過節流15個網址,以4爲界限?我在代碼中看不到任何最大線程數。你是否嘗試過不同的Web請求機制,比如這個? http://stackoverflow.com/questions/20259251/powershell-script-to-check-the-status-of-a-url – 2014-11-21 17:35:16
在這種情況下..我基於輸入節流...... $文件有x它的網址數量...所以4個網址4個進程開始......掛起,15個網址......你得到的圖片......我刪除了正在進行遏制的代碼,因爲我認爲它可能是這種情況。建議的流程沒有(至少我能找到)提供搜索特定文本的能力。我有另一種選擇使用New-Object Net.Webclient ...但我喜歡這種工作方式....所以除非有特定於此命令的某些內容阻止程序運行超過3次..我不會真的不想改變它。 – 2014-11-22 01:28:28