Работа занимает слишком много времени, чтобы закончить - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь использовать задания в 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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...