2013-08-12 2 views
3

이 환경의 서버 목록에서 바이러스 검사를 실행하려고합니다. 수백 가지의 기계가 있으므로 우리는 한 번에 약 10 개씩 (명령 줄 프롬프트를 사용하여) 스캔을 실행하고 싶습니다. 우리는 PowerShell을 완전히 처음 접해 왔기 때문에 어떤 도움도 정말 감사 할 것입니다. 우리는 우리가 사용할 필요가 명령을 무엇의 일반적인 생각이 - 여기 우리가 지금 일 것 같아요 방법을 :PowerShell을 사용하여 여러 서버에서 바이러스 검사를 실행하십시오.

$server = Get-Content "serverlist.txt" 
$server | % { 
    $VirusScan = { Scan32.exe } 
    Invoke-Command -ScriptBlock { $VirusScan } -computerName $server -ThrottleLimit 10 -Authentication domain/admin 
} 

사람이 우리가이 문제를 조율 할 수있는 방법에 대한 제안 사항이 있습니까?

답변

6

나는 원격 호스트에 병렬로 작업을 실행하기 위해이 같은 것을 사용하고 있습니다 : 이것은 좋은 일

$maxSlots = 10 
$hosts = "foo", "bar", "baz", ... 

$job = { 
    Invoke-Command -ScriptBlock { Scan32.exe } -Computer $ARGV[0] -ThrottleLimit 10 -Authentication domain/admin 
} 

$queue = [System.Collections.Queue]::Synchronized((New-Object System.Collections.Queue)) 
$hosts | % { $queue.Enqueue($_) } 

while ($queue.Count -gt 0 -or @(Get-Job -State Running).Count -gt 0) { 
    $freeSlots = $maxSlots - @(Get-Job -State Running).Count 
    for ($i = $freeSlots; $i -gt 0 -and $queue.Count -gt 0; $i--) { 
    Start-Job -ScriptBlock $job -ArgumentList $queue.Dequeue() | Out-Null 
    } 
    Get-Job -State Completed | % { 
    Receive-Job -Id $_.Id 
    Remove-Job -Id $_.Id 
    } 
    Sleep -Milliseconds 100 
} 

# Remove all remaining jobs. 
Get-Job | ForEach-Object { 
    Receive-Job -Id $_.Id 
    Remove-Job -Id $_.Id 
} 
+0

, 내가 코드를 조금 수정하지만이 엄청난 도움이되었다. –

관련 문제