2014-11-20 39 views
1

我很好奇,如果你能回答這個問題或指向正確的方向。有限的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]這樣做......但所有這三種方法使用喬布斯......所以它看起來..我不能在任何時候運行超過三個開始工作。

回答

0

你確定你的代碼好嗎?如果你打電話單獨的PowerShell會話多次內存可以很快消耗。檢查進程監視器是否存在高CPU或內存使用情況,並確保您的塊正在終止。或者發佈代碼。

+0

根據你的要求更新 – 2014-11-21 01:43:13

+0

你是什麼意思,通過節流15個網址,以4爲界限?我在代碼中看不到任何最大線程數。你是否嘗試過不同的Web請求機制,比如這個? http://stackoverflow.com/questions/20259251/powershell-script-to-check-the-status-of-a-url – 2014-11-21 17:35:16

+0

在這種情況下..我基於輸入節流...... $文件有x它的網址數量...所以4個網址4個進程開始......掛起,15個網址......你得到的圖片......我刪除了正在進行遏制的代碼,因爲我認爲它可能是這種情況。建議的流程沒有(至少我能找到)提供搜索特定文本的能力。我有另一種選擇使用New-Object Net.Webclient ...但我喜歡這種工作方式....所以除非有特定於此命令的某些內容阻止程序運行超過3次..我不會真的不想改變它。 – 2014-11-22 01:28:28