четверг, 6 февраля 2020 г.

[Powershell] Пробежаться по работающим компам в домене и выполнить удаленную команду

Иногда, работая в Powershell, требуется по-быстрому "пройтись" по компьютерам в домене и выполнить какой-нибудь удаленный код. 

Связка с фирменной утилитой psexec здесь прекрасно работает, если недоступно удаленное управление машинами через Powershell, к тому же через psexec выполнение команд происходит намного быстрее, ввиду совершенно другой технологии подключения к удаленному компьютеру. 

Например, для очистки DNS-кэша удаленных компьютеров я использую такой код.

cls
$comps = Get-ADComputer -Filter {name -like '*-W*'} | sort name
$comps | % {

$cn = $_.dnshostname
$count = 1
$timeout = 1000
$filter = 'Address="{0}" and Timeout={1}' -f $cn, $timeout

if (Get-WmiObject -Class Win32_PingStatus -Filter $filter) {
Write-Host $cn -ForegroundColor Magenta
cmd /c "psexec -s -d \\$cn ipconfig /flushdns" | out-null
}
}

Для обновления групповых политик соответственно меняем строчку на 

cmd /c "psexec -s -d \\$cn gpupdate /force" | out-null

и так далее, возможны любые команды.

Обратите внимание, что перед выполнением команды сначала проверяется доступность компьютера с помощью WMI пинг-запроса.

Комментариев нет:

Отправить комментарий