Я создал скрипт для проверки клиентских шлюзов на наличие открытых портов, который прекрасно работает, но работает вечно.Поэтому я пытаюсь разделить работу на потоки, чтобы она работала быстрее.
Проблема, которая у меня возникает, заключается в том, что когда я делаю Get-Job |Receive-Job утверждает, что -Port имеет значение 0
Добавление / удаление -ArgumentList $ gateway, $ port (или просто port), похоже, не решает проблему.
IПервоначально пытался с помощью Invoke-Comment ограничить количество заданий, но я вернулся к простой попытке заставить это работать.
$gateways = Import-CSV '.\perlaw.csv'
$ports = 22, 80, 8080, 443, 4443, 3389
foreach ($gateway in $gateways){
$scriptblock = {foreach ($port in $ports){
$result = Test-NetConnection $gateway.'connection gateway' -Port $port;
$out = @(
$gateway.'group id',
$gateway.'connection gateway',
$port
)
$output = "{0}, {1}, {2}" -f $out
if ($result.TcpTestSucceeded -eq 'True'){
Out-File -FilePath .\$($gateway.'group id').csv -InputObject
$output -NoClobber -Append;
}
}
}
Start-Job -ScriptBlock $scriptblock -ArgumentList $gateways, $ports
}
Я ожидаю, что это будет перебирать список шлюзов, икаждый порт для этого шлюза, тестируйте комбинации и выводите результаты в файл.
Это работает при однопоточности, при добавлении многопоточности задания мгновенно завершаются, и в файл ничего не записывается.Если я изменю задания, чтобы выполнить задание для каждого порта, на котором запущен Get / Receive-Job, порт отображается как 0 независимо от того, к чему я подключаюсь.
Надеюсь, это имеет смысл!