2014-11-20 5 views
1

이 답변을 받거나 올바른 방향으로 나를 가리킬 수 있는지 궁금합니다.제한된 powershell 시작 작업

URL을 테스트/모니터하는 스크립트를 작성했습니다. 코드에 오류가 없으므로 코드를 게시하지 않습니다 (원하지 않는 한). 그것은 위대한 작품. 심지어 scriptblock 시작 작업의 일환으로 그것을 실행할 수 있습니다. 내가 가진 문제는 시간에 3 가지 이상의 일을 할 수 없다는 것입니다. 왜 이런지 모르겠습니다. 나는 총 15 개의 URL을 3 개로 조절할 수 있으며 훌륭합니다. 만약 내가 실행 한계로 4 개의 15 개 URL로 실행하려고한다면, 그들은 매달릴 것이다. 그리고 나는 한 번에 하나씩 만 죽일 수있다. 그래서 저는 총 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

요청하신대로 업데이트 –

+0

한계를 4로 설정하여 15 개의 URL을 제어한다는 것은 무엇을 의미합니까? 귀하의 코드에서 최대 스레드 수를 제어하지 못합니다. 이 같은 다른 웹 요청 메커니즘을 사용해 보셨습니까? http://stackoverflow.com/questions/20259251/powershell-script-to-check-the-status-of-a-url –

+0

이 경우 .. 입력을 기반으로 조정 중이 야 ... $ 파일에 x가 있습니다. 그것의 URL의 수 ... 그래서 4 개의 URL 4 프로세스 시작 .. 그리고 15 개의 URL을 끊으십시오 ... 당신은 그림을 얻습니다 ... 나는 그것이 사실일지도 모른다라고 생각했던 것에 따라 trottling하고 있었던 코드를 삭제했다. 제안 된 프로세스는 특정 텍스트를 사이트에서 검색하는 기능을 제공하지 않습니다 (적어도 찾을 수 있음). New-Object Net.Webclient를 사용하는 또 다른 옵션이 있습니다. 그러나이 방법이 마음에 들지만 ....이 명령에 특정한 것이 없으면 3 번 이상 실행되지 않도록 프로그램을 중지하지 않는 한 ... 정말로 그것을 바꾸고 싶다. –

관련 문제