Я пытаюсь использовать задания в PowerShell для быстрого удаленного доступа к компьютерам.Моя проблема в том, что задания выполняются дольше, чем ожидалось, также кажется, что они выполняются один за другим, а не одновременно.Если последний компьютер в списке соответствует требованиям для подключения, то для списка из 27 компьютеров потребуется ~ 40 секунд.Большинство этих компьютеров выключены, поэтому требуется некоторое время, но я бы ожидал, что скрипт запустит все задания (~ 3 секунды), а затем выполнит остальные команды одновременно.Кажется, он все еще обрабатывает задания по порядку?Идея состоит в том, чтобы иметь возможность масштабирования до 500 компьютеров (большинство из которых не существуют или будут отключены).
$hdusername = Read-Host 'What is your username?'
$hdpassword = Read-Host 'What is your password?' -AsSecureString
$hdpassword = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($hdpassword))
$computers = $richtextbox1.Text.Split("`n") | % { $_.trim() }
foreach ($computer in $computers)
{
if ($computer -ne "")
{
Start-Job -Name "$computer" -ScriptBlock {
# your commands here, e.g.
Param ([string]$comp,
[string]$User,
[string]$Pass)
if (Test-Connection -ComputerName $comp -quiet -Count 1)
{
$NOTNULLIFLOCKED = $null
$NOTNULLIFLOCKED = gwmi -Class win32_process -computername $comp -Filter "Name='LogonUI.exe'"
if ($NOTNULLIFLOCKED -ne $null)
{
# No Active Session (LogonUI.exe Running)
# If LogonUI.exe is running, that means the login box is currently present on the screen.
# cmdkey is used to store a username and password for a machine so it with autologin
cmdkey /generic:TERMSRV/$comp /user:$User /pass:$Pass
& C:\Windows\System32\mstsc.exe "/v:$comp" "/h:768" "/w:1024"
sleep 1
cmdkey /delete:TERMSRV/$comp
}
}
} -ArgumentList $computer, $hdusername, $hdpassword | out-null
}
}