nbsp Теперь команды, вводимые с консоли этого окна будут выполняться на удаленном компьютере. Однако, не стоит запускать на выполнение программы, использующие графический интерфейс, взаимодействие с ними будет невозможно.
nbsp Вы можете выполнить любую консольную команду на удаленном компьютере. Примеры:
— получить информацию о настройке TCP/IP
Psexec.exe \REMOTEPC -u MydomainMyUsername -p mypass ipconfig /all
— получить информацию о сетевом окружении на REMOTEPC:
Psexec.exe \REMOTEPC -u MydomainMyUsername -p mypass net view
— послать сообщение от REMOTEPC на другой компьютер (REMOTE2):
Psexec.exe \REMOTEPC -u MydomainMyUsername -p mypass net send REMOTE2 TEXT OF MESSAGE
— подключить диск «C» удаленного компьютера REMOTE2 к удаленному компьютеру REMOTEPC:
Psexec.exe \REMOTEPC -u MydomainMyUsername -p mypass net use X: \REMOTE2C
— скопировать каталог C:TEST с удаленного компьютера REMOTEPC на удаленный компьютер REMOTE2:
7. DameWare Remote Support. Удалённый доступ в домене
Psexec.exe \REMOTEPC -u MydomainMyUsername -p mypass xcopy C:test*.* X:TEST*.*
— архивировать данные каталога «C:TEST» удаленного компьютера REMOTEPC на удаленный компьютер REMOTE2:
Psexec.exe \REMOTEPC -u MydomainMyUsername -p mypass arj a X:ARHIVtest.arj C:TEST*.*
nbsp Для того, чтобы выполнить командный файл (.bat или .cmd), нужно сначала скопировать его на удаленный компьютер, т.е. обязательно использовать ключ -c . Если в командном файле используются сетевые диски или команды, требующие доступ к сети (например, NET.EXE ), то нужно задать имя пользователя:
Psexec.exe \192.168.0.1 -u vasya -p mypass -c mycmd.cmd
nbsp Иногда необходимо запустить приложение на удаленном компьютере, видимое для его пользователя. Используйте ключ -i:
Psexec.exe \192.168.0.1 -u vasya -p mypass -i notepad.exe
После запуска блокнота (notepad.exe) PsExec будет ждать его завершения удаленным пользователем. Если в этом ожидании нет необходимости, то нужно использовать ключ -d .
nbsp Особенность запуска приложения от имени локальной учетной записи позволяет получить в редакторе реестра (REGEDIT.EXE) доступ к разделам SAM и SECURITY. Для этого нужно запустить удаленно regedit без указания имени пользователя и пароля и использовать «-i»:
psexec.exe \REMOTE -i regedit.exe
После чего на компьютере \REMOTE запустится редактор реестра с доступными разделами SAM и SECURITY.
Или локально с ключами -s и -i:
psexec.exe -s -i regedit.exe
В Windows Vista/7/8/10 используется изоляция сеанса, в котором работают системные службы, от сеанса пользователя (Session 0 Isolation), поэтому команда для этих версий ОС будет выглядеть иначе:
psexec -s -i 0 regedit.exe
после чего нужно нажать на кнопку «Просмотреть сообщение» в диалоговом окне «Обнаружение интерактивных служб».
nbsp Учтите, что в таком режиме использования редактора реестра вы получаете права на создание, изменение и удаление даже таких ключей, которые доступны только процессам ядра.
Дистанционного управления компьютером в домене
nbsp С точки зрения системного администрирования PSexec удобно использовать для запуска приложений на всех компьютерах домена (вместо имени компьютера задать — \*) с правами администратора или под локальной системной учетной записью (ключ -s).
Psexec.exe \* -s install.exe — запустить install.exe на всех компьютерах домена под системной учетной записью
nbsp Ну и последнее — Psexec можно использовать для обхода ошибки типа Negative delta time , возникающей на многоядерных системах из-за несовпадения счетчиков RTSC (Real Time Stamp Counter) у разных ядер. Для чего приложение запускается с помощью psexec только для одного ядра (ключ -a):
psexec.exe -a 1 -i -w «папка приложения» «приложение»
Ключи (кроме рассмотренных выше для PSExec):
-h — включить в выдаваемый отчет информацию об установленных обновлениях (hotfixes).
-s — отображать список установленных программ.
-d — отображать информацию о дисках (тип, файловая система, метка тома, размер, объем свободного пространства.
-c — выдавать данные в формате CSV (текстовый файл с данными, разделенными по полям с помощью символа-разделителя — запятой). Вы можете импортировать данные из такого файла в другие приложения, например, в Excel.
-t — позволяет задать символ разделитель в файлах формата CSV, если он должен отличаться от запятой.
pskill [\computer [-u username [-p password]]]
Если \computer опущено — то выполняется завершение процесса на локальной машине.
process Id or name — имя или идентификатор процесса (его можно получить с помощью рассматриваемой ниже утилиты PsList.exe).
nbsp Кстати, с помощью PsKill можно принудительно получить перезагрузку или даже «синий экран смерти» (BSOD- Blue Screen Of Death), если завершать системные процессы (lsass, winlogon и т.п.)
pskill winword — завершить процесс winword на локальном компьютере
pskill \comp3 -u admin -p password 620 — завершить процесс с идентификатором 620 на компьютере comp3
pskill \SERVER -u admin -p password winlogon — завершить процесс winlogon на компьютере SERVER. Будет вызван «синий экран смерти» системы. Подключение к компьютеру SERVER выполняется с использованием имени пользователя admin и пароля password
pslist.exe [-d][-m][-x][-t][-s [n] [-r n] [\computer [-u username][-p password][name|pid]
-d — включить в отчет информацию о потоках, выполняемых процессом (thread details).
-m — включить в отчет информацию об использовании памяти (memory).
-x — включить в отчет все вышеперечисленное.
-t — выдать только дерево процессов (tree).
-s [n] — запускаться в режиме диспетчера задач, каждые n секунд (по умолчанию — 1 сек. Для завершения нажать Escape.
-r n — время обновления экрана в режиме диспетчера задач (по умолчанию -1 сек.).
name — выдать информацию только о процессе с именем name. Если имеется несколько процессов с одинаковым именем, (например FAR), то будет выдана информация обо всех процессах, имя которых соответствует name. Если в качестве name задать часть имени, например символ «F», то в отчет попадут сведения о всех процессах, имя которых начинаются с указанной буквы.
pid — выдать информацию о процессе с идентификатором pid. Будет выдана информация только об одном процессе, имеющем идентификатор pid.
psloggedon.exe [-l] [-d domain] [-x] [\computername]
или psloggedon.exe [username]
-l — показать только локальных пользователей.
-d — показать только пользователей домена domain.
-x — не показывать время входа в систему.
psloggedon.exe -l \server — Выдать имя локального пользователя компьютера server.
psloggedon.exe \server — Выдать список всех пользователей, подключенных к компьютеру server.
psloggedon.exe admin -d mydomain.com — Найти в домене mydomain.com компьютер с залогиненым пользователем «admin».
-a — выдать данные после указанного времени (after).
-b — выдать данные до указанного времени (before).
-c — очистить журнал событий после выдачи (clear).
-d — выдать записи только за предыдущие n дней.
-f — использовать фильтр типов событий (начальная буква i — информация, w — предупреждения, e — ошибки,»-f we» — предупреждения и ошибки).
-i — выдать записи с указанным идентификатором ID (не более 10 ID).
-l — выдать содержимое ранее сохраненного в файл журнала событий.
-n — выдавать только первые n записей.
-o — выдавать только по источнику события (-o cdrom).
-s -t — ключи формирования выходного потока для строкового поиска.
event log — тип журнала ( по умолчанию — System)
nbsp Например, выдать в файл otlup.txt информацию об отказе в доступе (событие c в журнале Security) на компьютере с адресом 192.168.0.25 за последние 7 дней:
psloglist.exe \192.168.0.25 -u admin -p admpass -d 7 -i 529 Security > otlup.txt
nbsp Выдать в файл errors.txt информацию о предупреждениях и ошибках за последние 3 дня на текущем компьютере в журнале System:
psloglist.exe -u admin -p admpass -d 3 -f we > errors.txt
nbsp Если вы не знаете номер идентификатора события, но знаете его смысловое описание, то можно объединить выполнение PSloglist.exe с параметром -s, в цепочку с утилитой findstr.exe, указав последней ключевое слово (несколько слов) для поиска. Первый пример можно было бы выполнить и так:
psloglist.exe \192.168.0.25 -u admin -p admpass -d 7 Security | findstr -I /C:FAILURE > otlup.txt
Ключ /C: задает строку поиска, ключ -I указывает, что не надо учитывать регистр символов. Если в строке поиска есть пробелы, то ее надо заключить в двойные кавычки — /C:»Audit Failure».
Username — имя пользователя, для которого будет изменен пароль.
NewPassword — новый пароль.
psservice.exe [\Computer [-u Username [-p Password]]]
Cmd может принимать значения:
query -запрос о состоянии службы.
config — запрос о конфигурации службы
setconfig — изменение типа запуска службы
start — запустить службу
stop — остановить службу
restart — перезапустить службу
pause — приостановить службу
cont — продолжить работу приостановленной службы
depend — показать список служб, зависящих от указанной
find -найти службу в локальной сети
nbsp Примеры:
psservice \gamerPC -u admin -p admpass query nncron — опросить состояние службы nncron на компьютере gamerPC
psservice -u admin -p admpass setconfig nncron auto — установить на локальном компьютере тип запуска службы в «авто». Возможные варианты — demand — «вручную» и disabled — «отключено».
psservice -u admin -p admpass find «DHCP клиент» — найти службу «DHCP клиент» в локальной сети. Результат — список компьютеров с работающей службой. Если после имени службы задать ключ all — то в список попадут и компьютеры, где служба установлена, но не запущена. И учтите, что имена служб содержащих русские символы должны задаваться в ДОС-кодировке и, при наличии пробелов — заключаться в двойные кавычки.
-a — отменить запланированные перезагрузку или отключение.
-c — разрешить локальному пользователю отменять перезагрузку или выключение.
-d — перевести компьютер в спящий режим.
-f — принудительно закрывать запущенные приложения.
-h — перевод в режим спящий режим (если поддерживается) с выгрузкой содержимого оперативной памяти на диск с последующим восстановлением после включения.
-k — выключить питание (перезагрузка, если выключение питания не поддерживается )
-l — блокировка компьютера.
-m — текст сообщения, которое будет выдано пользователю останавливаемого компьютера.
-o — завершение сеанса текущего пользователя.
-r — перезагрузить (Reboot) компьютер.
-s — завершение работы без выключения питания.
-t -счетчик времени в секундах до начала завершения работы (если не задан — 20 секунд) или время в 24-часовом формате, когда будет выполнено завершение работы системы. .
pssuspend [-r] [\RemoteComputer [-u Username [-p Password]]]
-r -продолжить работу ранее приостановленной службы.
process Id or name — имя или идентификатор процесса. Можно получить с помощью ранее рассмотренной утилиты PsList.
Примеры использования PSTools в командных файлах.
nbsp Теперь нужно обеспечить последовательное формирование IP-адресов компьютеров для командной строки PSlist. Проще всего это сделать с помощью присвоения временной переменной окружения (действительной только на время выполнения командного файла) значения постоянной составляющей адреса (например — 192.168.0.) и вычисляемого значения младшей части (например, в диапазоне 1-254). Для примера будем считать, что нам необходимо просканировать компьютеры в диапазоне адресов:
192.168.0.1 nbsp 192.168.0.30:
set IPTMP=192.168.0. — старшая часть адреса
set /A IPLAST=1 — младшая часть. Ключ /A означает вычисляемое числовое выражение
set IPFULL=%IPTMP%%IPLAST% — значение полного IP-адреса.
nbsp Командная строка для PSlist будет выглядеть следующим образом:
pslist \%IPFULL% %1
nbsp Теперь осталось только циклически запускать PSlist, прибавляя в каждом цикле единицу к младшей части адреса, пока ее значение не достигнет 30 и анализировать значение ERRORLEVEL после выполнения. Для анализа результата будем выполнять переход командой:
GOTO REZULT%ERRORLEVEL%
обеспечивающей переход на метку REZULT0 при обнаружении процесса и на REZULT1 — при его отсутствии.
nbsp Окончательное содержимое командного файла:
nbsp В заключение добавлю, что для того, чтобы этот скрипт работал, PSlist.exe и PSkill.exe должны быть доступны в путях поиска исполняемых файлов, например в каталоге WINDOWSsystem32. Пользователь, запускающий его, должен обладать правами администратора по отношению к сканируемым компьютерам. И, если текущий пользователь таковым не является, то в параметры запуска утилит PSlist.exe и PSkill.exe нужно добавить ключи, задающие имя пользователя и пароль.
Этот командный файл несложен, но на практике не всегда применим, особенно когда в диапазоне IP- адресов есть большое количество выключенных компьютеров. Время выполнения в этом случае может быть неприемлемо большим. Для решения проблемы можно использовать опрос компьютеров по списку, полученному из сетевого окружения. Пример использования подобного приема найдете в статье «Командные файлы».
Примеры использования утилиты PsShutdown в командных файлах можно найти в статье, посвященной планировщику NNcron.
nbsp Веб-узел Sysinternals был создан в 1996 г. Марком Руссиновичем (Mark Russinovich) и Брюсом Когсвеллом (Bryce Cogswell) для размещения созданных ими усовершенствованных сервисных программ и технической информации, а в июле 2006 г. корпорация Microsoft приобрела компанию Sysinternals. После этого события, утилиты PsTools при первом запуске требуют подтверждения лицензионного соглашения в графическом окне, что может вызвать некоторые неудобства в случае, когда нет возможности сделать это подтверждение, например, на удаленном компьютере. Для решения данной проблемы используйте запуск утилит с ключом /accepteula (хотя бы 1 раз) или создайте командный файл с нужными вам утилитами пакета и выполните его на используемом компьютере:
psexec.exe /accepteula
psfile.exe /accepteula
psgetsid.exe /accepteula
Psinfo.exe /accepteula
pskill.exe /accepteula
pslist.exe /accepteula
psloggedon.exe /accepteula
psloglist.exe /accepteula
pspasswd.exe /accepteula
psservice.exe /accepteula
psshutdown.exe /accepteula
pssuspend.exe /accepteula
.
nbsp При возникновении проблем с кодировкой кириллицы в командной строке, запустите редактор реестра и перейдите к разделу
HKEY_CURRENT_USERConsole
измените строковый параметр FaceName на Lucida Console и добавьте параметр типа REG_DWORD c именем CodePage присвоив ему десятичное (не шестнадцатеричное . ) значение 1251 .
При работе в окне командного процессора, сменить кодовую страницу, можно с помощью команды CHCP
CHCP — вывести номер текущей кодовой страницы
CHCP 866 — установить кодовую страницу 866 (DOS)
CHCP 1251 — установить кодовую страницу 1251 (Windows)
Графическая оболочка для командной строки утилит PSTools .
Front-end for PsTools (FePsTools) — программа графического интерфейса вокруг командной строки утилит пакета PsTools. Позволяет упростить создание нужных параметров для основных утилит пакета. В процессе заполнения полей и установки флажков, программа формирует требуемую для выполнения выбранной утилиты, командную строку, которую можно скопировать в буфер обмена, создать для нее ярлык, или выполнить непосредственно из среды FePsTools.
Программа написана под .NET Framework 2.0 или старше. Инсталляция не требуется, но при первом запуске необходимо указать в настройках путь к используемому на данном компьютере пакету утилит PsTools — File — Settings — PsTools Directory .
Ниже приведены ссылки для скачивания пакета PSTools . Набор утилит устаревшей версии 2.44 бывает полезен, когда возможности обновленных версий не устраивают Вас по каким-либо причинам.
Если вы желаете поделиться ссылкой на эту страницу в своей социальной сети, пользуйтесь кнопкой «Поделиться»
Источник: admcomp.ru
Удаленное управление с помощью PowerShell
Существует довольно много методов для работы с удаленными компьютерами. Есть Windows Management Instrumentation (WMI), широко используемый в VBScript. Есть различные утилиты, которые позволяют осуществлять удаленное управление, типа PSExec от Sysinternals. Даже многие командлеты PowerShell имеют параметр ComputerName для выполнения на удаленных компьютерах.
В общем методов полно, но у каждого из них есть свои минусы. Во первых — разный синтаксис, в котором легко запутаться. Во вторых — некоторые команды ведут себя по разному в зависимости от того, локально или удаленно они выполняются. Ну и наконец, для связи может потребоваться открытие дополнительных портов на брандмауэре, что не есть хорошо с точки зрения безопасности.
PowerShell Remoting решает большинство описанных проблем. Он основан на Microsoft реализации протокола Web Services for Management (WS-Management), а для связи использует службу Windows Remote Management (WinRM). Связь между компьютерами осуществляется по HTTP (по умолчанию) или HTTPS. Весь трафик между двумя компьютерами шифруется на уровне протокола (за исключением случаев, когда используется SSL). Поддерживаются несколько методов аутентификации, включая NTLM и Kerberos.
В отличие от утилит, использующих различные программные интерфейсы, PS Remoting работает следующим образом: команды, вводимые на локальном компьютере, передаются на удаленный компьютер и там выполняются, затем результат передается обратно. Поскольку все команды выполняются локально, нет необходимости заботится о совместимости. Кроме того, для работы PS Remoting нужен всего один открытый порт на брандмауэре.
Есть несколько способов управления с помощью PowerShell Remoting.
Управление «один к одному»
Самый простой способ удаленного управления — интерактивно открыть удаленную сессию и в ней выполнить нужные действия. Например, откроем сессию на компьютер SRV4 и рестартуем на нем сервис печати:
Enter-PSSession -ComputerName SRV4
Restart-Service -Name spooler
Посмотрим состояние сервиса и закроем удаленную сессию:
Get-Service -Name spooler
Exit-PSSession
Интерактивная работа подходит для решения несложных задач удаленного администрирования. Если же надо автоматизировать процесс, то лучше воспользоваться командлетом Invoke-Command . Вот так с его помощью можно сделать то же самое действие:
Invoke-Command -ScriptBlock -ComputerName SRV4
Эта команда откроет удаленную сессию на SRV4, выполнит блок команд, указанный в параметре -ScriptBlock , и закроет сессию. А чтобы задание выполнялось в фоновом режиме, дополнительно можно указать параметр -AsJob .
Cледует помнить о том, что при работе в фоновом режиме PowerShell не возвращает результат. Для его получения придется воспользоваться командлетом Receive-Job .
Для того, чтобы выполнить не пару-тройку команд, а какой либо скрипт, у Invoke-Command есть параметр –FilePath , который можно использовать вместо –ScriptBlock для определения файла сценария. Для примера я создал скрипт, который выводит список остановленных служб и запустил его на удаленной машине SRV4:
Invoke-Command -FilePath .script.ps1 -ComputerName SRV4
Управление «один ко многим»
Довольно часть возникает необходимость параллельно выполнить одну задачу на нескольких компьютерах. Это довольно легко можно сделать с помощью того же Invoke-Command . Например, имена компьютеров можно просто перечислить через запятую:
Invoke-Command -ScriptBlock -ComputerName SRV4,SRV5
Поместить в переменную:
Или взять из файла:
Invoke-Command -ScriptBlock -ComputerName`
(Get-Content .servers.txt)
Примечание: у Invoke-Command есть параметр ThrottleLimit , ограничивающий максимальное количество компьютеров, которыми можно управлять одновременно. По умолчанию этот параметр равен 32. При необходимости его можно изменить, но учтите, что повышение этого параметра увеличит нагрузку на процессор и память вашего компьютера, поэтому эту операцию нужно выполнять с большой осторожностью.
Сессии
Каждый раз при выполнении Invoke-Command создается новая сессия, на создание которой тратится время и ресурсы. Чтобы этого избежать мы можем открыть одну сессию, в которой и выполнять все команды. Например, откроем сессию с именем SRV4 на компьютер SRV4 и поместим ее в переменную $session, а затем этой сессии выполним нашу задачу (остановим многострадальный spooler):
$session = New-PSSession -ComputerName SRV4 -Name SRV4
Invoke-Command -ScriptBlock `
-Session $session
Сессия будет активна до того момента, пока мы не выйдем из консоли PowerShell. Также сессию можно закрыть — Disconnect-PSSession или удалить — Remove-PSSession .
А теперь несколько интересных возможностей, появившихся в PowerShell 3.0. Если раньше при выходе из сессии или закрытии консоли сессия удалялась, то в PS 3.0 при закрытии сессия переходит в состояние disconnected. Мы можем открыть новый сеанс на этом же (или любом другом) компьютере и выполнить команду прямо в этой отключенной сессии. В качестве примера стартуем на компьютере SRV4 сервис печати, остановленный в прошлый раз:
Invoke-Command -ScriptBlock `
-ComputerName SRV4 -Disconnected
Еще один вариант использования отключенных сессий — запуск длительных по времени задач. Для примера откроем сессию c именем LongJob на SRV4 и запустим в ней фоновое задание, которое будет выводить список сервисов с интервалом в 1 минуту:
$session = New-PSSession -ComputerName SRV4 -Name LongJob
Invoke-Command -Session $session -ScriptBlock`
> -AsJob
Посмотрим, как выполняется задача и закроем сессию:
Receive-Job -Name Job2
Disconnect-PSSession $session
Идем на другой компьютер и открываем консоль, Подключаемся к сессии LongJob и с помощью командлета Receive-PSSession получаем результат выполнения задания:
Connect-PSSession -Name LongJob -ComputerName SRV4
Receive-PSSession -Name LongJob
Или еще вариант, без явного подключения к сессии с помощью Connect-PSSession :
$session = Get-PSSession -Name LongJob -ComputerName SRV4
$job = Receive-PSSession $session -OutTarget Job
Receive-Job $job
Примечание: для того, чтобы результат остался в системе, Receive-Job надо использовать с параметром -Keep .
Неявное удаленное управление
Еще один, довольно нестандартный способ удаленного управления — неявное удаленное управление (Implicit remoting). Используя его можно, не создавая удаленной сессии, локально выполнять командлеты, находящиеся на удаленном компьютере.
Для примера берем обычную рабочую станцию, без установленных средств удаленного администрирования. Создаем удаленную сессию с контроллером домена SRV4 и импортируем в эту сессию модуль Active Directory:
$session = New-PSSession -ComputerName SRV4
Invoke-Command -Session $session
Затем экспортируем из удаленной сессии командлеты Active Directory и помещаем их в локальный модуль RemoteAD:
Export-PSSession -Session $session -CommandName *-AD* -OutputModule RemoteAD`
-AllowClobber
Эта команда создаст в папке WindowsPowerShellModulesRemoteAD новый модуль PowerShell. Загружены будут только командлеты с именами, соответствующими шаблону *-AD*. При этом сами командлеты не копируются на локальный компьютер. Локальный модуль служит своего рода ярлыком, а сами команды будут выполняться на удаленном контроллере домена.
После создания модуля удаленную сессию можно закрыть, она больше не понадобится.
Импортируем новый модуль в текущий сеанс (в PS 3.0 можно этот шаг пропустить):
А теперь внимание — мы не открываем удаленную сессию с контроллером домена, где расположены командлеты. Не нужно явно запускать этот сеанс — это можно сделать неявно, попытавшись выполнить удаленные командлеты:
New-ADUser -Name BillGates -Company Microsoft
Get-ADUser BillGates
При этом будет восстановлено удаленное подключение к контроллеру домена, после чего команда будет передана на контроллер домена и там выполнена. Результат выполнения будет сериализован в XML и передан по сети на локальный компьютер, где будет выполнена десериализация в объекты, с которыми может работать PowerShell.
Удаленный сеанс будет активным до тех пор, пока вы не закроете консоль или не удалите модуль RemoteAD.
Неявное удаленное управление позволяет работать с командлетами на удаленном компьютере практически так же, как если бы они были установлены на локальной машине. При этом все необходимые командлеты всегда под рукой, что довольно удобно.
В заключение скажу, что на данный момент PowerShell Remoting является основным инструментом для удаленного управления операционными системами Windows. Поэтому знать о его возможностях и уметь ими пользоваться просто необходимо любому Windows-администратору.
Источник: windowsnotes.ru