Управление удаленным компьютером через cmd. PsExec — утилита для удаленного выполнения команд. Групповые политики и скрипты

  • Серверное администрирование ,
  • Системное администрирование ,
  • Терминология IT
  • В наше время даже для собак придумали удаленное управление .


    Возвращаясь к циклу «Конспект Админа», мне хотелось бы рассказать о вариантах запуска исполняемых программ на удаленных компьютерах. Эта статья будет интересна тем, у кого еще нет систем централизованного управления, но уже есть понимание утомительности ручного обхода рабочих станций и серверов. Либо тем, кому решения «под ключ» не интересны ввиду неспортивности.


    В качестве того, зачем нужен такой запуск программ, можно привести недавнюю истерию с Петей\Не-Петей, когда все бросились проверять\отключать и загружать обновления. Да и провести инвентаризацию или установить срочный патч таким методом тоже можно.


    Когда-то давно я устроился работать в организацию в период эпидемии Kido\Conficker . Наиболее простым способом выяснить, все ли хорошо в ИС компании, была славная утилита от Касперского под названием Kido Killer , которая проверяла наличие вируса и устраняла его. Запускать программу на доброй сотне машин руками было невесело, поэтому пришлось знакомиться с автоматизацией.

    Если в операционных системах *nix для удаленного запуска, как правило, используется SSH, то у Windows способов запуска программ и скриптов воистину как песка в пустыне. Я разберу основные варианты, как общеизвестные, так и экзотические. Таких очевидных вещей как telnet-сервер касаться не буду, тем более Microsoft уже убрала его из современных ОС.

    Способы старые, временем проверенные

    Psexec

    Пожалуй, это первое, что приходит на ум, когда идет речь об удаленном запуске программ. Утилита от Марка Руссиновича используется еще со времен Windows NT и до сих пор применяется. Помимо основной функции, можно использовать ее и как Runas, и для запуска программ в пользовательской сессии терминального сервера. Psexec также позволяет задавать ядра процессора, на которых будет запускаться программа, и ее приоритет в системе.


    В качестве примера посмотрим, установлено ли обновление, закрывающее нашумевшую уязвимость SMB на списке компьютеров:


    psexec @computers.txt /u USER /p PASS cmd.exe /v /c ""systeminfo | find "KB4012212" || echo !computername! >> \\server\share\log.txt"""

    В файле computers.txt находится список компьютеров. Для запуска по всему домену можно использовать \\*. В файле \\server\share\log.txt будут появляться имена рабочих станций или серверов без обновления. Если в домене существуют компьютеры с *nix на борту или нет доступа к административному сетевому ресурсу Admin$ ― команда на этой машине не выполнится, но обработка продолжится. Чтобы скрипт не зависал при каждой попытке подключения, можно задать тайм-аут с помощью ключа -n .


    Если компьютер выключен ― мы об этом не узнаем. Поэтому лучше предварительно проверять доступность машин или собирать в файле информацию об успешном или неудачном выполнении.


    К минусам Psexec можно отнести то, что она из-за своего удобства и популярности часто используется вирусописателями. Поэтому антивирусные системы могут обнаруживать утилиту как опасность вида remote admin.


    По умолчанию процесс на удаленной машине выполняется от имени пользователя, запустившего Psexec. При необходимости логин и пароль можно задать явно или же использовать аккаунт SYSTEM.

    WMIC

    Для управления системами Windows с помощью разных графических утилит часто используется WMI (Windows Management Instrumentation) ― реализация объектно-ориентированного стандарта управления WBEM. В качестве утилиты с графическим интерфейсом для работы с WMI можно использовать wbemtest.exe.


    Для работы с WMI из консоли создана wmic.exe . Например, для проверки установленных обновлений вместо жутковатой конструкции из предыдущего примера можно использовать простую команду:


    wmic /node:"servername" qfe get hotfixid | find "KB4012212"

    Использовать список компьютеров также можно командой /node:"@computers.txt".


    Еще при помощи WMI можно запускать программы – синтаксис предельно прост:


    wmic /node:"servername" process call create "cmd /c somecommands"

    К сожалению, в отличие от Psexec, получить вывод в консоли не получится ― придется выводить результаты команды в файл.


    По умолчанию процесс на удаленной машине выполняется от имени пользователя, запустившего wmic. При необходимости логин и пароль можно задать явно.

    Групповые политики и скрипты

    Если предыдущие варианты не требовали доменной среды, то в этом случае потребуется домен. Поддерживаются скрипты при входе и выходе пользователя из системы, а также при ее включении и выключении. Поскольку каждый администратор Windows сталкивался с ними, я не буду подробно расписывать как ими пользоваться ― лишь напомню, где их искать.



    Скрипты, выполняющиеся при старте и завершении системы.



    Скрипты, выполняющиеся при входе и выходе пользователя из системы.


    Скрипты, настраиваемые в пользовательском разделе, выполняются от имени пользователя, а в разделе компьютера ― под аккаунтом SYSTEM.

    Назначенные задания

    Довольно интересный способ, заслуживающий право на жизнь. Назначенные задания можно создавать из командной строки при помощи утилиты schtasks.exe , выполнять их, затем удалять. Подробнее с синтаксисом можно ознакомиться в документации , я же разберу пример использования назначенных заданий в доменной среде. Предположим, нам нужно выполнить команду как можно быстрее вне зависимости от того, выключен компьютер или нет. Для этого используются так называемые предпочтения групповых политик (Group Policy Preference).


    Искать установку назначенных заданий следует в конфигурации компьютера или пользователя ― «Настройка ― Параметры панели управления ― Назначенные задания».



    Создание нового назначенного задания.


    Для выполнения команды или скрипта ASAP понадобится создать «Немедленную задачу (Windows 7 и выше)». Если вдруг в инфраструктуре остались машины под управлением Windows XP, то подойдет «Очередное задание (Windows XP)».


    Стоит сделать несколько политик с соответствующими WMI-фильтрами или создать два разных назначенных задания в одной политике с нацеливанием ― например, при помощи того же WMI-фильтра. Это поможет избежать конфликтов в разнородной среде со старыми и новыми Windows.


    Пример WMI-фильтра для применения политики только на компьютерах с Windows XP:


    SELECT * FROM Win32_OperatingSystem WHERE Version LIKE "5.1%" AND ProductType = "1"

    В остальном процедура создания назначенного задания тривиальна. Единственное, не забывайте отметить пункт «Применить один раз и не применять повторно», если задача не требует повторного запуска.



    Запускаем немедленную задачу только один раз.


    При использовании таких назначенных заданий программа запустится, как только компьютер получит обновление групповой политики. Это удобно: не нужно проверять доступность компьютеров в случае Psexec и wmic и заставлять пользователей перезагружать машины, как в случае скриптов групповых политик. При необходимости можно скопировать файл скрипта локально в разделе «Настройка ― Конфигурация Windows ― Файлы».


    Назначенные задания позволяют явно задать имя пользователя для запуска программы, в том числе и для SYSTEM.

    Через реестр

    Модификация реестра на пользовательских машинах ― странный вариант, лишь на случай крайней необходимости. Можно использовать ветки Run или RunOnce. Подробнее о них ― в документации . Сама модификация реестра может проводиться через групповые политики или из командной строки ― например, такой командой:


    reg add \\COMPUTER\HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce /v script /t Reg_SZ /d "script.cmd"

    В зависимости от ветки реестра, процесс будет выполняться или под пользователем, выполнившим вход в систему, или под аккаунтом SYSTEM.


    Есть и другие способы, такие как правка ярлыков в папке «Автозагрузка» или добавление в ярлык к популярной программе && script.cmd , но эти методы уже из серии «можно, но не нужно».


    Теперь перейдем к новым инструментам.

    Способы новые или куда же без PowerShell

    PowerShell, оправдывая свое название, может подключаться к удаленным компьютерам при помощи WMI, RPC и WS-Management (WSMan). Использование последнего метода требует предварительной настройки.


    Командлеты, не требующие предварительной настройки, как правило, имеют параметр ComputerName, но не имеют параметра Session. Посмотреть список таких командлетов можно командой:


    Get-Command | where { $_.parameters.keys -contains "ComputerName" -and $_.parameters.keys -notcontains "Session"}

    Для настройки WSMan в общем случае достаточно выполнить команду Enable-PSRemoting-Force. Она запустит службу удаленного управления WinRM и пропишет исключения в фаерволе ― в принципе, это можно сделать для всего домена при помощи групповых политик. Подробнее настройка описана в документации .


    После того как все компьютеры будут готовы принимать запросы, мы сможем подключаться при помощи соответствующих командлетов PowerShell. Для проверки возможности подключения используется командлет Test-WSMan .



    Проверка возможности подключения.


    Для того чтобы выполнить определенную команду или скрипт, используется командлет Invoke-Command со следующим синтаксисом:


    Invoke-Command -ComputerName COMPUTER -ScriptBlock { COMMAND } -credential USERNAME

    Где COMPUTER ― имя компьютера, COMMAND ―– имя команды, а USERNAME ― имя пользователя, если оно нужно.



    Смотрим содержимое диска С удаленного компьютера.


    Если же нам нужно получить полноценную консоль ― не автоматизации ради, а ради управления конкретным компьютером, ― то можно использовать командлет Enter-PSSession.



    Работаем в консоли удаленного компьютера.


    Напомню, что с помощью можно ограничить доступные подобной сессии командлеты или дать доступ нужным без прав администратора.


    Конечно, кроме встроенных средств и небольших утилит, существует множество программ для управления структурой. Помимо взрослых решений, для управления конфигурациями вроде Chef, Ansible и MS SCCM можно использовать и средства мониторинга вроде Zabbix, и даже консоль управления антивирусом Касперского.


    В период гетерогенных структур хорошо бы иметь возможность унифицированного управления Windows и Linux. Это можно сделать и с помощью PowerShell, что само по себе достойно отдельной статьи ― стоит такую сделать или уже лишнее?


    Теги:

    • удаленный запуск
    • wmi
    • powershell
    Добавить метки

    Здравствуйте, уважаемые читатели! Некоторые из вас возможно задавались вопросом как удалить программу на удаленном компьютере . Рядовому пользователю это скорей всего не нужно, а системному администратору какой-нибудь локальной сети это может понадобиться.

    Для удаления и установки ПО на удаленных компьютерах существует множество различных решений и программных средств. В этой статье мы рассмотрим решение данного вопроса на основе встроенных средств windows.

    Удалять программы на удаленных машинах нам поможет Windows Management Instrumentation или проще говоря WMI . В переводе на русский это инструментарий управления Windows .

    Как запустить wmi

    Запуск wmi выполняется из командной строки. Открыть командную строку можно из "Пуск -> Все программы -> Стандартные -> Командная строка" , либо просто нажимаете клавиши "WIN + R" , откроется окно "Выполнить" в котором в поле "открыть" набираете "cmd" и нажимаете "OK" .

    В открывшемся окне командной строки набираем команду wmic и нажимаем "Enter" :

    Таким образом мы запустили консольную утилиту для взаимодействия со структурой WMI на локальном или удаленном компьютере. Теперь с помощью язык запросов WMI Query Language (WQL) можно выполнять различные команды WMI.

    Для примера получим весь список установленного ПО на удаленном компьютере . Для этого выполняем следующий запрос:

    /node:{имя компьютера} product get name

    Где вместо {имя компьютера} подставляем имя удаленной и локальной машины, с которой необходимо получить список установленных программ. Имя компьютера лучше заключить в кавычки. Жмем "Enter" , ждем некоторое время на сбор информации и получаем примерно следующую картину:

    Как удалить программу с помощью WMI?

    Удалить программу можно с помощью следующего запроса:

    /node:{имя компьютера} product where name={название программы} call uninstall

    Где вместо {имя компьютера} вставляем имя компьютера с которого будет удаляться программа, а вместо {название программы} имя удаляемой программы как в полученном списке ПО.

    Например, нам необходимо удалить «Microsoft Office Professional Plus 2010». Тогда запрос будет выглядеть примерно так:

    /node:{home2} product where name="Microsoft Office Professional Plus 2010" call uninstall

    Нажимаем «Enter» и на запрос предложения удаления программы отвечаем Y :

    wmic:root\cli>/node:"tep-ws000010" product where name="Microsoft Office Professional Plus 2010" call uninstall
    Execute (\\TEP-WS000010\ROOT\CIMV2:Win32_Product.IdentifyingNumber="{90140000-0011—0000-1000-0000000FF1CE}",Name="Microsoft Office Professional Plus 2010",Version="14.0.4763.1000") ->Uninstall () (Y/N/?)? Y

    После попытки удаления будет выведено сообщение о результатах. В случае успешного удаления сообщение будет такого вида:

    Method execution successful.
    Out Parameters:
    instance of __PARAMETERS
    {
    ReturnValue = 0;
    };

    На этом все! До встречи в следующих выпусках!

    Возникла задача выполнить кое-какую операцию с помощью командной строки на другом компьютере, само собой идти к пользователю запускать командную строку и вбивать команды- не наш метод, нам надо не вставая с кресла запустить командную строку удаленного компьютера и выполнить необходимые действия в командной строке. Конечно, подобное действие можно выполнить с помощью программ удаленного подключения, но это не всегда удобно и требует наличия подобной программы у вас и у пользователя (клиент- сервер). Процедуру по подключению к командной строки другого компьютера, можно выполнить значительно просто, с помощью команды PSEXEC .

    PsExec - это утилита командной строки, с возможность вызывать в интерактивном режиме интерфейс командной строки в удаленных системах Windows и удаленно запускать различные команды.

    Эта утилита ставиться на только на компьютер администратора. Для установки необходимо ее скачать, вот ссылка на официальный сайт Microsoft . После скачивания архива его необходимо разархивировать, в разархивированной папке найти файл PsExec.exe. Нажмите на нем два раза, появиться окно с лицензионным соглашением, нажимаем "Agree ".

    Разберем синтаксис команды:

    psexec [\\компьютер[,компьютер2[,...] | @файл][-u пользователь [-p пароль]][-n s][-l][-s|-e][-x][-i [сеанс]][-c [-f|-v]][-w каталог][-d][-<приоритет>][-a n,n,... ] программа [аргументы]

    компьютер Указывает программе PsExec, что нужно запустить приложение на заданном компьютере или компьютерах. Если имя компьютера не указано, то программа PsExec запустит приложение в локальной системе, если же вместо имени компьютера задан символ «звездочка» (\\*), то программа PsExec запустит приложение на всех компьютерах текущего домена.

    @файл Указывает программе PsExec, что нужно запустить приложение на всех компьютерах, перечисленных в заданном текстовом файле.

    -a Процессоры, на которых можно запустить приложение, отделяются запятыми, при этом процессоры нумеруются, начиная с 1. Например, чтобы запустить приложение на процессорах втором и четвертом, введите «-a 2,4»

    -c Указанная программа копируется в удаленную систему для выполнения. Если этот параметр не задан, то приложение должно находиться в системной папке удаленной системы.

    -d Указывает, что не нужно ждать завершения приложения. Этот параметр следует использовать только при запуске неинтерактивных приложений.

    -e Указанный профиль учетной записи не загружается.

    -f Указанная программа копируется в удаленную систему, даже если такой файл в удаленной системе уже есть.

    -i Запускаемая программа получает доступ к рабочему столу указанного сеанса в удаленной системе. Если сеанс не задан, то процесс выполняется в консольном сеансе.

    -l При запуске процесса пользователю предоставляются ограниченные права (права группы администраторов отменяются, и пользователю предоставляются только права, назначенные группе «пользователи»). В ОС Windows Vista процесс запускается с низким уровнем благонадежности.

    -n Позволяет задать задержку подключения к удаленным компьютерам (в секундах).

    -p Позволяет указать необязательный пароль для имени пользователя. Если этот параметр опущен, то будет выдан запрос на ввод пароля, при этом пароль не будет отображаться на экране.

    -s Удаленный процесс запускается из системной учетной записи.

    -u Позволяет указать необязательное имя пользователя для входа в удаленную систему.

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

    -w Позволяет указать для процесса рабочий каталог (путь внутри удаленной системы).

    -x Отображает интерфейс пользователя на рабочем столе Winlogon (только в локальной системе).

    -приоритет (приоритет) Позволяет задавать для процесса различные приоритеты: -low (низкий), -belownormal (ниже среднего), -abovenormal (выше среднего), -high (высокий) или -realtime (реального времени).

    программа Имя запускаемой программы.

    аргументы Передаваемые аргументы (обратите внимание, что пути файлов должны указываться как локальные пути в целевой системе).

    Примеры работы команды PSEXEC:

    1) Для того чтобы запустить командную строку другого компьютера, необходимо ввести
    psexec \\<имя компьюетра> cmd

    например:
    psexec \\WIN782 cmd


    после этого можете вводить необходимые вам команды.

    2) Для того чтобы запустить какою либо программу (в данном примере test.exe) на удаленном компьютере необходимо выполнить команду, (эта команда копирует программу test.exe в удаленную систему и выполняет ее в интерактивном режиме).

    psexec \\<имя компьютера> -c test.exe

    например:
    psexec \\ WIN782 -c test.exe

    3) Если в удаленной системе такая программа уже установлена и находится не в системном каталоге, укажите полный путь к этой программе

    psexec \\WIN782 c:\temp\test.exe

    Этот урок покажет, как удалить файл через командную строку в Windows (7, 8, XP, Vista). В этом помогут команды DEL или ERASE, которые используются тогда, когда Вы не можете обычным способом удалить файл. Для , DEL и ERASE не подойдут.

    Естественно, для начала . С этим действием Вы получите наилучшие результаты.

    Если Вы воспользуетесь таким уроком, тогда файл будет удален сразу без отправки в корзину.

    В cmd введите DEL /? и нажмите Enter, чтобы предварительно ознакомиться с параметрами команд. Если сделали правильно, Вы увидите разъяснения (скриншот ниже).

    Использование cmd при загрузке Windows

    Иногда возникает необходимость зайти в cmd до запуска системы. Связано с тем, что вредоносная программа блокирует удачный вход или загрузочный сектор системы поврежден, тогда Вам помогут следующие шаги:

    1. Откройте командную строку при загрузке Windows
    2. В cmd введите DiskPart и нажмите Enter
    3. Далее потребуется написать list volume и еще раз нажать энтер (см. скриншот ниже). Это позволит увидеть букву диска, в котором нужно удалить файл.
    4. После получения сведений, напечатайте exit и кликните Enter.

    Теперь смело вводите варианты команд удаления, которые расписаны ниже.

    Такими действиями Вы удалите любой файл на компьютере посредством командной строки.

    Удаление конкретного файла

    Для удаления конкретного элемента Вам надо знать его имя и расширение. В противном случае возрастает вероятность удалить не то, что надо!

    В cmd введите следующую команду и нажмите энтер:

    DEL /F /S /Q /A "Полный путь элемента с расширением"

    Например, если я хочу, удалить с именем «delete» и с расширением (.bat), расположенный на диске C в папке «мусор», нужно ввести команду:

    DEL /F /S /Q /A "C:\мусор\delete.bat"

    Удаление всех файлов с подтверждением и без из командной строки

    В таком случае Вы должны подтвердить или опровергнуть действия буквами (Y - да / N - нет), чтобы удалить все файлы в основном каталоге и вложенных папках.

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

    DEL /F /S /Q /A "Полный путь к папке\*"

    Если нужно удалить все файлы на диске D из папки «в корзину», в которой множество других каталогов и файлов, я применю команду:

    DEL /F /S /Q /A "D:\в корзину\*"

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

    DEL /P /F /S /A "D:\эксперимент\*"

    Возможно, удалять все файлы с заданным расширением, тогда команда примет вид:

    DEL /F /S /Q /A "Полный путь к папке\*.расширение"

    Особенно полезно, когда много однотипных ненужных элементов, которые не вариант перебирать вручную, а можно просто удалить пачкой из cmd.

    При правильном подходе, можно удалить файл через командную строку , за несколько секунд. Надеюсь, рекомендации пошли на пользу. Если Вас интересует cmd, советую ознакомиться с материалом, который будет не менее интересен.

    В наше время даже для собак придумали удаленное управление .


    Возвращаясь к циклу «Конспект Админа», мне хотелось бы рассказать о вариантах запуска исполняемых программ на удаленных компьютерах. Эта статья будет интересна тем, у кого еще нет систем централизованного управления, но уже есть понимание утомительности ручного обхода рабочих станций и серверов. Либо тем, кому решения «под ключ» не интересны ввиду неспортивности.


    В качестве того, зачем нужен такой запуск программ, можно привести недавнюю истерию с Петей\Не-Петей, когда все бросились проверять\отключать SMBv1 и загружать обновления. Да и провести инвентаризацию или установить срочный патч таким методом тоже можно.


    Когда-то давно я устроился работать в организацию в период эпидемии Kido\Conficker . Наиболее простым способом выяснить, все ли хорошо в ИС компании, была славная утилита от Касперского под названием Kido Killer , которая проверяла наличие вируса и устраняла его. Запускать программу на доброй сотне машин руками было невесело, поэтому пришлось знакомиться с автоматизацией.

    Если в операционных системах *nix для удаленного запуска, как правило, используется SSH, то у Windows способов запуска программ и скриптов воистину как песка в пустыне. Я разберу основные варианты, как общеизвестные, так и экзотические. Таких очевидных вещей как telnet-сервер касаться не буду, тем более Microsoft уже убрала его из современных ОС.

    Способы старые, временем проверенные

    Psexec

    Пожалуй, это первое, что приходит на ум, когда идет речь об удаленном запуске программ. Утилита от Марка Руссиновича используется еще со времен Windows NT и до сих пор применяется. Помимо основной функции, можно использовать ее и как Runas, и для запуска программ в пользовательской сессии терминального сервера. Psexec также позволяет задавать ядра процессора, на которых будет запускаться программа, и ее приоритет в системе.


    В качестве примера посмотрим, установлено ли обновление, закрывающее нашумевшую уязвимость SMB на списке компьютеров:


    psexec @computers.txt /u USER /p PASS cmd.exe /v /c ""systeminfo | find "KB4012212" || echo !computername! >> \\server\share\log.txt"""

    В файле computers.txt находится список компьютеров. Для запуска по всему домену можно использовать \\*. В файле \\server\share\log.txt будут появляться имена рабочих станций или серверов без обновления. Если в домене существуют компьютеры с *nix на борту или нет доступа к административному сетевому ресурсу Admin$ ― команда на этой машине не выполнится, но обработка продолжится. Чтобы скрипт не зависал при каждой попытке подключения, можно задать тайм-аут с помощью ключа -n .


    Если компьютер выключен ― мы об этом не узнаем. Поэтому лучше предварительно проверять доступность машин или собирать в файле информацию об успешном или неудачном выполнении.


    К минусам Psexec можно отнести то, что она из-за своего удобства и популярности часто используется вирусописателями. Поэтому антивирусные системы могут обнаруживать утилиту как опасность вида remote admin.


    По умолчанию процесс на удаленной машине выполняется от имени пользователя, запустившего Psexec. При необходимости логин и пароль можно задать явно или же использовать аккаунт SYSTEM.

    WMIC

    Для управления системами Windows с помощью разных графических утилит часто используется WMI (Windows Management Instrumentation) ― реализация объектно-ориентированного стандарта управления WBEM. В качестве утилиты с графическим интерфейсом для работы с WMI можно использовать wbemtest.exe.


    Для работы с WMI из консоли создана wmic.exe . Например, для проверки установленных обновлений вместо жутковатой конструкции из предыдущего примера можно использовать простую команду:


    wmic /node:"servername" qfe get hotfixid | find "KB4012212"

    Использовать список компьютеров также можно командой /node:"@computers.txt".


    Еще при помощи WMI можно запускать программы – синтаксис предельно прост:


    wmic /node:"servername" process call create "cmd /c somecommands"

    К сожалению, в отличие от Psexec, получить вывод в консоли не получится ― придется выводить результаты команды в файл.


    По умолчанию процесс на удаленной машине выполняется от имени пользователя, запустившего wmic. При необходимости логин и пароль можно задать явно.

    Групповые политики и скрипты

    Если предыдущие варианты не требовали доменной среды, то в этом случае потребуется домен. Поддерживаются скрипты при входе и выходе пользователя из системы, а также при ее включении и выключении. Поскольку каждый администратор Windows сталкивался с ними, я не буду подробно расписывать как ими пользоваться ― лишь напомню, где их искать.



    Скрипты, выполняющиеся при старте и завершении системы.



    Скрипты, выполняющиеся при входе и выходе пользователя из системы.


    Скрипты, настраиваемые в пользовательском разделе, выполняются от имени пользователя, а в разделе компьютера ― под аккаунтом SYSTEM.

    Назначенные задания

    Довольно интересный способ, заслуживающий право на жизнь. Назначенные задания можно создавать из командной строки при помощи утилиты schtasks.exe , выполнять их, затем удалять. Подробнее с синтаксисом можно ознакомиться в документации , я же разберу пример использования назначенных заданий в доменной среде. Предположим, нам нужно выполнить команду как можно быстрее вне зависимости от того, выключен компьютер или нет. Для этого используются так называемые предпочтения групповых политик (Group Policy Preference).


    Искать установку назначенных заданий следует в конфигурации компьютера или пользователя ― «Настройка ― Параметры панели управления ― Назначенные задания».



    Создание нового назначенного задания.


    Для выполнения команды или скрипта ASAP понадобится создать «Немедленную задачу (Windows 7 и выше)». Если вдруг в инфраструктуре остались машины под управлением Windows XP, то подойдет «Очередное задание (Windows XP)».


    Стоит сделать несколько политик с соответствующими WMI-фильтрами или создать два разных назначенных задания в одной политике с нацеливанием ― например, при помощи того же WMI-фильтра. Это поможет избежать конфликтов в разнородной среде со старыми и новыми Windows.


    Пример WMI-фильтра для применения политики только на компьютерах с Windows XP:


    SELECT * FROM Win32_OperatingSystem WHERE Version LIKE "5.1%" AND ProductType = "1"

    В остальном процедура создания назначенного задания тривиальна. Единственное, не забывайте отметить пункт «Применить один раз и не применять повторно», если задача не требует повторного запуска.



    Запускаем немедленную задачу только один раз.


    При использовании таких назначенных заданий программа запустится, как только компьютер получит обновление групповой политики. Это удобно: не нужно проверять доступность компьютеров в случае Psexec и wmic и заставлять пользователей перезагружать машины, как в случае скриптов групповых политик. При необходимости можно скопировать файл скрипта локально в разделе «Настройка ― Конфигурация Windows ― Файлы».


    Назначенные задания позволяют явно задать имя пользователя для запуска программы, в том числе и для SYSTEM.

    Через реестр

    Модификация реестра на пользовательских машинах ― странный вариант, лишь на случай крайней необходимости. Можно использовать ветки Run или RunOnce. Подробнее о них ― в документации . Сама модификация реестра может проводиться через групповые политики или из командной строки ― например, такой командой:


    reg add \\COMPUTER\HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce /v script /t Reg_SZ /d "script.cmd"

    В зависимости от ветки реестра, процесс будет выполняться или под пользователем, выполнившим вход в систему, или под аккаунтом SYSTEM.


    Есть и другие способы, такие как правка ярлыков в папке «Автозагрузка» или добавление в ярлык к популярной программе && script.cmd , но эти методы уже из серии «можно, но не нужно».


    Теперь перейдем к новым инструментам.

    Способы новые или куда же без PowerShell

    PowerShell, оправдывая свое название, может подключаться к удаленным компьютерам при помощи WMI, RPC и WS-Management (WSMan). Использование последнего метода требует предварительной настройки.


    Командлеты, не требующие предварительной настройки, как правило, имеют параметр ComputerName, но не имеют параметра Session. Посмотреть список таких командлетов можно командой:


    Get-Command | where { $_.parameters.keys -contains "ComputerName" -and $_.parameters.keys -notcontains "Session"}

    Для настройки WSMan в общем случае достаточно выполнить команду Enable-PSRemoting-Force. Она запустит службу удаленного управления WinRM и пропишет исключения в фаерволе ― в принципе, это можно сделать для всего домена при помощи групповых политик. Подробнее настройка описана в документации .


    После того как все компьютеры будут готовы принимать запросы, мы сможем подключаться при помощи соответствующих командлетов PowerShell. Для проверки возможности подключения используется командлет Test-WSMan .



    Проверка возможности подключения.


    Для того чтобы выполнить определенную команду или скрипт, используется командлет Invoke-Command со следующим синтаксисом:


    Invoke-Command -ComputerName COMPUTER -ScriptBlock { COMMAND } -credential USERNAME

    Где COMPUTER ― имя компьютера, COMMAND ―– имя команды, а USERNAME ― имя пользователя, если оно нужно.



    Смотрим содержимое диска С удаленного компьютера.


    Если же нам нужно получить полноценную консоль ― не автоматизации ради, а ради управления конкретным компьютером, ― то можно использовать командлет Enter-PSSession.



    Работаем в консоли удаленного компьютера.


    Напомню, что с помощью JEA можно ограничить доступные подобной сессии командлеты или дать доступ нужным без прав администратора.


    Конечно, кроме встроенных средств и небольших утилит, существует множество программ для управления структурой. Помимо взрослых решений, для управления конфигурациями вроде Chef, Ansible и MS SCCM можно использовать и средства мониторинга вроде Zabbix, и даже консоль управления антивирусом Касперского.


    В период гетерогенных структур хорошо бы иметь возможность унифицированного управления Windows и Linux. Это можно сделать и с помощью PowerShell, что само по себе достойно отдельной статьи ― стоит такую сделать или уже лишнее?


    Теги: Добавить метки