Ограничить количество одновременно запущенных потоков

#multithreading #powershell

#многопоточность #powershell

Вопрос:

У меня есть скрипт, который выполняет проверку ping в моей рабочей среде, и я пытаюсь ограничить количество одновременно запущенных потоков. Я поиграл со многими решениями онлайн, но, похоже, не могу добиться никакого прогресса. Любая помощь будет оценена.

 $scriptblock = {

Param($comp)
IF (Test-Connection -computername $comp -Quiet -Count 1) {
    [bool]$responding = $true
}
else {
    Write-Host "***$comp ERROR -Not responding***" 
    $responding = $false
}

New-Object psobject -Property @{'Computer Name' = $comp;
    'Online'                        = $responding;

}  

}

$CurrentDate = Get-Date
$CurrentDate = $CurrentDate.ToString('MM-dd-yyyy_hh-mm-ss')
$location = Get-Location

$comps = (get-content -path $location'hostnames.txt').Trim()
$comps | ForEach-Object {Start-Job -Scriptblock $scriptblock -ArgumentList  $_ | Out-Null}

Get-Job | Wait-Job | Receive-Job | Select-Object 'Computer Name','Online'`
-ExcludeProperty RunspaceId, PSComputerName, PSShowComputerName   |   Export-csv -NoTypeInformation "$locationPingTest-$CurrentDate.csv"
  

Комментарии:

1. у Test-Connection командлета есть -ThrottleLimit параметр. я не тестировал это, но похоже , что это будет делать то, что вы хотите.

2. Привет, Lee_Dailey, я не думаю, что это приведет к тому, что я пытаюсь сделать, но спасибо за ваше предложение.

3. ах! [ усмешка ] что ж, в таком случае вы можете захотеть выглядеть как модуль PoshRSJob. у него есть -ThrottleLimit параметр для Start-RSJob командлета.