Запустите MSTSC / RDP из задания, только если ни один пользователь не вошел в систему удаленно - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь проверить работу систем, поскольку у нас есть расхождения с AD и нашим инструментом управления запасами.Мне нужно попытаться удаленно подключиться к тонне компьютеров (~ 500).Я пытаюсь создать графический интерфейс пользователя / скрипт, который будет удален к компьютеру, если не будет зарегистрирован ни один пользователь. Я могу сделать это один за другим, но, поскольку существует множество компьютеров, которые находятся в AD, но их не существуеттребуется много времени, чтобы каждый потерпел неудачу.Я хочу попробовать запустить работу для всех компьютеров в списке, но запускать mstsc можно только в том случае, если не зарегистрировано ни одного пользователя.

#Clear previous jobs
Get-Job | Remove-Job
$computers = $richtextbox1.Text.Split("`n") | % { $_.trim() }
foreach ($computer in $computers) {
    if ($computer -ne "") {
         Start-Job -ScriptBlock {
             if (Test-Connection -ComputerName $args[0] -Count 1) {
                $uname = ""
                $uname = Get-WmiObject -Class Win32_Computersystem -ComputerName $args[0] |
                         Select-Object -Expand UserName
                if ($uname -like "") {
                      C:\Windows\System32\mstsc.exe /v:$args /h:768 /w:1024
                      # At this point the mstsc box would pop up, and the job
                      # can be killed if possible
                }
             }
         } -ArgumentList $computer
    }
}

Если удалить if ($uname -like ""), оно запустится mstsc.Другая проблема заключается в том, что когда я делаю это с блоком из 60 компьютеров, он запускает mstsc для ~ 6 компьютеров, подождите около 45 секунд, затем откроет еще пару окон (существовало только около 10 компьютеров).Так что я думаю, что может быть проблема с работой, которая выполняется слишком долго?Как лучше всего отменить задание, если его выполнение занимает слишком много времени?

Я не уверен, что проблема связана с $args / $args[0].При работе с заданиями в прошлом мне приходилось использовать $args[0].Я также знаю, что это может привести к противоречивым результатам при входе в систему пользователя с Windows 10, поэтому, если есть лучший вариант, это будет полезно.

1 Ответ

0 голосов
/ 10 июля 2019

В итоге я воспользовался этой проверкой, чтобы проверить, вошел ли пользователь в систему, и это сработало.

$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.
    & C:\Windows\System32\mstsc.exe "/v:$comp" "/h:768" "/w:1024"
}

У меня сейчас другая проблема, но я опубликую другой вопрос.

...