У меня проблемы с получением фоновых потоков для работы в Powershell. Я хотел бы использовать пространства выполнения, где я могу подключить скрипт и получать обновления, когда он есть, и позволять моему основному потоку делать с этими данными то, что ему нужно. Я не уверен, почему этот код не возвращает правильные значения? Все тестированные мной серверы возвращают true, если они не используются в пространстве выполнения, но здесь возвращается значение 0.
Я не заинтересован в использовании рабочих мест powershell.
$servers = @("x1","x2","x3");
$results = New-Object Collections.Generic.List[String];
$input = New-Object 'System.Management.Automation.PSDataCollection[psobject]'
$output = New-Object 'System.Management.Automation.PSDataCollection[psobject]'
$results.Clear();
foreach ($server in $servers)
{
Write-Host $server;
$powerShell = [Management.Automation.PowerShell]::Create();
[Void]$PowerShell.AddScript({
$result = Test-Connection $server -Count 1 -Quiet;
return ($server - $result)
})
$handle = $powerShell.BeginInvoke($input,$output);
$results.Add($output);
}
$results;
или
$results = New-Object Collections.Generic.List[String];
$input = New-Object 'System.Management.Automation.PSDataCollection[psobject]'
$output = New-Object 'System.Management.Automation.PSDataCollection[psobject]'
$results.Clear();
foreach ($server in $servers)
{
Write-Host $server;
$powerShell = [Management.Automation.PowerShell]::Create();
[Void]$PowerShell.AddScript({
param ($server)
$result = Test-Connection $server -Count 1 -Quiet;
return ($server - $result)
})
$handle = $powerShell.BeginInvoke($server,$output);
#$handle = $powerShell.BeginInvoke($input,$output);
$results.Add($output);
}
$results;