PsExec

Любой сисадмин слышал про PsExec.
Однако на практике далеко не все знают нюансы использования этой утилиты.
Разберем несколько примеров команд и эти самые нюансы в работы с ней.

PsExec это утилита Марка Руссиновича из написанного им пакета программ Sysinternals, которая позволяет выполнять команды на удаленных компьютерах, в том числе и с системными правами.

PsExec работает только с повышенными привилегиями:
сеанс необходимо запускать под администратором

Для теста можете попробовать создать папку в сеансе без привилегий:

psexec cmd /c md C:\windows\test

В  результате вы увидите ошибку Couldn’t install PSEXESVC service

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

Важно понимать что PsExec не дает админских прав тем, у кого их нет:
она только позволяет выполнять команды на удаленных ПК
Запуск от имени системы

Так как права System имеют наивысший приоритет, в редких случаях пригодится возможность запуска программ с такими привилегиями.
Например запустить regedit, в котором будут доступны два, по умолчанию скрытых раздела: HKLM\SAM и HKLM\SECURITY
Для это необходимо запустить PsExec с ключом -s

psexec -i -s regedit

Ключ -i необходим для запуска программ в интерактивном режиме

Т.е. ключ -i определяет будет ли выведен GUI на экран и возможность взаимодействия с ним.
В противном же случае, если не указать ключ -i, окно запуститься в фоновом режиме, и увидеть и завершить его мы сможет только через диспетчер задач.

Примеры команд

Запуск команды CMD через PsExec на удаленном хосте:

psexec \\host1138 net start "Zabbix Agent"

Получим размер папки Temp на удаленном компьютере с помощью PoSh:

psexec \\host1138 powershell -ExecutionPolicy RemoteSigned -command "'{0:N2}' -f ((gci C:\Windows\Temp | measure Length -Sum).Sum/1MB)"
Ключ -ExecutionPolicy RemoteSigned необходим для того,
что бы не возникала ошибка, вызванная запретом выполнения скриптов по умолчанию
Скрыть баннер

Что бы при выполнении каждой команды psexec не появлялся баннер с копирайтом, используйте ключ

-nobanner
Массовое выполнение команд

Предварительно создаем файл со списком имен компьютеров.
Используем параметр @ и сразу за ним вводим путь к файлу.
Либо переходим в папку с файлом и обращаемся к нему по относительному пути.

psexec @C:\comps.txt hostname

Команда выполнит поочередно команды на этих ПК.
Так же можно перечислить имена компьютеров через запятую

psexec \\comp01,comp02 hostname
PSexec в Powershell

Весьма удобно использовать PsExec в сценариях Powershell.
Например в скрипте для удаленной установки обновления Skype (8 версии):

# Получаем имя активного пользователя на компьютере и удаляем его доменную часть
$Names = (Get-ADComputer -f *).Name
foreach($Name in $Names){
 $User = ( gwmi Win32_ComputerSystem -ComputerName $Name ).UserName -replace 'DOMAIN\\'
 $Command = 'cmd /c cd "C:\Users\$User\AppData\Roaming\Microsoft\Skype for Desktop" & start Skype-Setup.exe /VERYSILENT /SP- /NOCANCEL /NORESTART /SUPPRESSMSGBOXES /NOLAUNCH'
 # Подставляем в основную команду имя активного пользователя
 $Command = $Command -replace '\$User', $User
 # Выполняем заготовленную команду на удаленной машине
 psexec -i -s powershell.exe -inputformat none -Command $Command
}
Ключ -i здесь является обязательным параметром, т.к. он запускает приложение не в фоновом режиме, а в сеансе активного пользователя

Важный момент

По умолчанию PsExec, в сеансе PowerShell, после выполнения каждой команды возвращает в консоль код ошибки.
В случае отсутствии ошибки кодом будет 0.
Тем не менее оболочка, для того что бы вывести приглашение к вводу, будет ожидать нажатия Enter.
В противном случае выполнение программы остановится и будет висеть, пока вы не остановите ее выполнение вручную.
Понятное дело что на удаленном компьютере мы не желаем ничего нажимать или чего то дожидаться.
Что бы PsExec не зависал,
нам нужно использовать powershell.exe вместе с ключом

 -inputformat none

В продолжении темы PsExec предлагаю ознакомиться со статьей по удаленной установке и деинсталляции программ

Добавить комментарий

Ваш адрес email не будет опубликован.