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