1

これに答えることができるか、正しい方向に私を向けることができるかどうか知りたい.

URL をテスト/監視するスクリプトを作成しました。コードにエラーがないため、コードを投稿していません (必要な場合を除きます)。それはうまくいきます。開始ジョブの一部としてスクリプトブロックを実行することもできます。私が抱えている問題は、一度に 3 つ以上のジョブを実行できないか、ハングすることです。これがなぜなのかわかりません。合計 15 個の URL を 3 つに絞って実行できますが、これは素晴らしいことです。実行制限として 4 を使用して 15 の URL で実行しようとすると、ハングします..一度に 1 つずつ強制終了できます..3 つだけが残り、それらが終了するまで。そのため、合計 3 つの powershell インスタンスしか起動できないか、ハングするようです。これがなぜなのか説明できる人はいますか?すべての検索で、スロットリングの方法を示すページが表示されますが、それは実際には私の問題ではありません。


プロセスを監視すると、それぞれが約 25MB のメモリを消費し、アイドル状態になります... 1 つを強制終了すると、他の 3 つが CPU の使用を開始し、プロセスがおそらく 30MB のメモリに達して終了します。システムには 8 GB のメモリとクアッド コード I5-2400 CPU @ 3.10 GHz があります。リクエスト通り...

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]でこれを試してみました...しかし、3つの方法はすべてジョブを使用しています...それが表示されます..それ以上実行することはできません3 つのジョブが同時に開始されます。

4

1 に答える 1