Мне любопытно, можете ли вы ответить на этот вопрос или указать мне правильное направление.
Я написал сценарий, который проверяет / отслеживает URL-адреса. Я не публикую код (если вы этого не хотите), потому что в коде нет ошибки. Отлично работает. Я даже могу запустить скриптблок как часть стартового задания. У меня проблема, похоже, в том, что я не могу запускать более 3 заданий за раз .. или они зависают. Я не уверен, почему это так. Я могу запустить его с 15 URL-адресами, доведенными до 3, и это здорово. Если я попытаюсь запустить его на 15 URL с 4 в качестве моего лимита запуска, они будут зависать .. и я могу убить по одному за раз .. пока не останется только 3, и они закончатся. Так что кажется, что я могу запустить только 3 экземпляра PowerShell, иначе они зависнут. Кто-нибудь объяснит, почему это так? Все мои поиски приводят меня к страницам, которые показывают, как задросселировать, и это не моя проблема.
Наблюдая за процессами, каждый из них потребляет около 25 МБ памяти и бездействует ... Если я убью одного, остальные 3 начнут использовать процессор, процесс увеличится до 30 МБ памяти и завершится. Система имеет 8 ГБ памяти и четырехъядерный процессор I5-2400 @ 3,10 ГГц. Как просили...
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] ... но все три метода используют Jobs ... так что похоже ... Я не могу запустить больше, чем три начальных задания одновременно.