Перезагрузите компьютер с Windows удаленно с помощью PowerShell
Предварительным условием использования этих методов является обеспечение возможности связи с удаленными системами и аутентификации при необходимости. Кроме того, вам необходимо убедиться, что удаленная система не ожидает перезагрузки.
Вам понадобится следующее:
1]Перезагрузите удаленный компьютер с помощью Restart-Computer
Этот командлет прост в использовании с гибкими параметрами. Дополнительным условием для работы команды является то, что WinRM настроен и разрешен через брандмауэр Windows удаленного компьютера, а WMI разрешен через брандмауэр Windows.
Restart-Computer -ComputerName $ComputerName -Force
Чтобы перезагрузить несколько компьютеров параллельно, выполните следующую команду:
$ComputerArray | ForEach-Object -Parallel { Restart-Computer -ComputerName $_ -Force } -ThrottleLimit 3
2]Перезагрузите удаленный компьютер с помощью Invoke-CimMethod
В работает с использованием метода WIM для перезагрузки удаленной системы, хотя и не так гибко, как командлет.
Дополнительным предварительным условием для работы команды является то, что WinRM настроен и разрешен через брандмауэр Windows удаленного компьютера.
Invoke-CimMethod -ComputerName $ComputerName -ClassName 'Win32_OperatingSystem' -MethodName 'Reboot'
3]Перезагрузите удаленный компьютер с помощью shutdown.exe.
В — это стандартный встроенный исполняемый файл, который Windows предлагает для перезапуска системы, и это не команда PowerShell, но предлагает ряд надежных опций.
Дополнительным предварительным условием для работы команды является то, что на удаленном компьютере включена служба удаленного реестра и разрешен WMI через брандмауэр Windows.
shutdown.exe /m \remotecomputer /r /t 0
4]Перезагрузите удаленный компьютер с помощью PSExec.exe.
Одна из наиболее часто используемых утилит в наборе инструментов Sysinternals, предлагает несколько уникальных возможностей, которые упрощают взаимодействие с удаленной системой.
Дополнительным предварительным условием для работы команды является обеспечение работы службы SMB, включения общего доступа к файлам и принтерам, отключения простого общего доступа к файлам и доступности административного общего ресурса admin $.
psexec.exe -d -h \remotecomputer "shutdown.exe /r /t 0 /f"
5]Перезагрузите удаленный компьютер с помощью RunDLL32.exe.
В предлагает способ запуска определенных методов для внутренних исполняемых файлов и API-интерфейсов Windows, таких как shell32.dll. Есть два метода, с помощью которых вы можете перезапустить систему, используя эту функцию, но на самом деле этот метод нельзя использовать удаленно сам по себе. в удаленной системе.
Способ 1:
Invoke-Command -ComputerName $ComputerName -ScriptBlock { & rundll32.exe user.exe ExitWindowsExec }
Способ 2:
Invoke-Command -ComputerName $ComputerName -ScriptBlock { & rundll32.exe user.exe ExitWindowsExec }
6]Перезагрузите удаленный компьютер с помощью Taskkill.exe.
Последний по порядку, но не по значимости, — еще одна утилита Windows, которая предлагает некоторые функции для перезапуска Windows, хотя и окольным путем. Завершив процесса, вы принудительно перезагрузите Windows.
taskkill.exe /S \remotecomputer /IM lsass.exe /F
Вот и все, о 6 способах использования PowerShell для перезагрузки удаленного компьютера!
Оператор &
Если необходимо указать полный путь к исполняемому файлу, то можно воспользоваться оператором & (оператор вызова). Он позволяет выполнить строку текста, указанную в кавычках, как единую команду. Например:
& ′C:Program FilesHello.exe′
Поскольку оператор & не анализирует передаваемую команду, то он не может интерпретировать ее параметры. Поэтому дополнительные параметрыаргументы передаются также в виде текста, в кавычках. Для примера возьмем предыдущую программу и немного изменим ее, так что она принимает нужный текст в виде аргумента:
& ′C:Program FilesHello.exe′ ′Hello, world′
При желании можно указать нескольких аргументов через запятую:
& ′C:Program FilesHello.exe′ ′Hello,′, ′ world′
Для удобства команду и аргументы можно поместить в переменные:
$exe = ′C:Program FilesHello.exe′$arg1 = ′Hello′$arg2 = ′world′& $exe $arg1 $arg2
Ну и если аргументов много, то их можно объединить, воспользовавшись такой конструкцией:
$exe = ′C:Program FilesHello.exe′$allargs = @(′Hello,′,′world′)& $exe $allargs
Работа со службами и процессами
PowerShell, конечно же, умеет управлять службами и процессами в Windows, для этого существуют такие командлеты как:
- Get-Process – выводит информацию о запущенных процессах на компьютере;
- Start-Process – запускает один или несколько процессов на компьютере;
- Stop-Process — останавливает один или несколько запущенных процессов;
- Get-Service – выводит информацию о службах;
- Restart-Service – перезапускает службу;
- Start-Service – запускает службу;
- Stop-Service — останавливает службу;
- Suspend-Service – приостанавливает работу службы;
- Set-Service – с помощью данного командлета можно изменить свойства службы, например, описание, отображаемое имя и режим запуска. Также его можно использовать для запуска, остановки или приостановки службы.
Форматирование в Windows PowerShell
В Windows PowerShell существует набор командлетов, которые предназначены для форматирования вывода результата работы командлета. Они позволяют пользователю отобразить результат в том виде, в котором ему удобно просматривать данный результат.
- Format-List – вывод результата команды в формате списка свойств, где на каждой новой строке отдельное свойство;
- Format-Table — вывод результата команды в виде таблицы;
- Format-Wide — вывод результата команды в виде широкой таблицы, в которой отображается только одно свойство каждого объекта;
- Format-Custom – в данном случае форматирование вывода происходит с использованием пользовательского представления.
Остановка всех остальных сеансов Windows PowerShell
В некоторых случаях может пригодиться возможность остановки всех выполняющихся сеансов Windows PowerShell, отличных от текущего. Если сеанс использует слишком много ресурсов или недоступен (он может выполняться удаленно или в другом сеансе), возможно, остановить его напрямую не получится. При попытке остановить все выполняющиеся сеансы может быть завершен текущий сеанс.
Каждый сеанс Windows PowerShell имеет переменную среды PID, содержащую идентификатор процесса Windows PowerShell. Можно проверить переменную $PID на наличие идентификатора каждого сеанса и завершить только сеансы Windows PowerShell с другим идентификатором. Следующая команда конвейера делает именно это и возвращает список завершенных сеансов (из-за использования параметра PassThru):
Импорт и экспорт
PowerShell позволяет импортировать и экспортировать данные в разных распространенных форматах, например, CSV или XML, а также перенаправлять вывод результата работы команды во внешний файл или на принтер.
- Export-Csv – экспорт данных в формат CSV;
- Import-Csv – импортирует данные из CSV файла;
- Export-Clixml — экспорт данных в формат XML;
- Import-Clixml — импортирует файл CLIXML и создает соответствующие объекты в оболочке Windows PowerShell;
- Out-File — посылает вывод результата работы командлета во внешний файл (например, в TXT);
- Out-Printer — вывод результата работы команды на принтер;
- Import-Module — добавляет модули в текущей сессии.
Получение процессов (Get-Process)
Для получения процессов, запущенных на локальном компьютере, выполните командет без параметров.
Отдельные процессы можно получить, указав их имена или идентификаторы. Следующая команда возвращает процесс Idle:
То, что в некоторых ситуациях командлеты не возвращают данные, является нормальным. Однако если при указании процесса по его идентификатору не находит совпадений, он выдает ошибку, так как стандартной целью является получение известного выполняющегося процесса. Если процесс с указанным идентификатором отсутствует, весьма вероятно, что идентификатор неправильный или нужный процесс уже завершился:
Параметр Name командлета можно использовать для указания подмножества процессов на основе имени процесса. Параметр Name может принимать несколько имен в виде списка с разделителями-запятыми и поддерживает использование подстановочных знаков, что позволяет задавать шаблоны имен.
Например, следующая команда возвращает процессы, имена которых начинаются с «ex.».
Поскольку класс System.Diagnostics.Process .NET является основой для процессов Windows PowerShell, он удовлетворяет некоторым соглашениям, используемым System.Diagnostics.Process. Одно из таких соглашений требует, чтобы имя процесса для исполняемого файла никогда не содержало «.exe» в конце имени этого файла.
также принимает несколько значений для параметра Name.
Параметр ComputerName командлета можно использовать для получения процессов на удаленных компьютерах. Например, следующая команда получает процессы PowerShell на локальном (представленным «localhost») и двух удаленных компьютерах.
Имена компьютеров в этих данных не указаны, однако они хранятся в свойстве MachineName объектов процесса, возвращаемых . Следующая команда использует командлет для отображения свойств ID, ProcessName и MachineName (ComputerName) объектов процесса.
Эта более сложная команда добавляет в стандартные отображаемые данные свойство MachineName.
Командлеты для работы с Active Directory (AD)
Windows PowerShell, конечно же, позволяет работать со службой каталогов Active Directory. Для этих целей существует немало командлетов, вот некоторые из них:
- New-ADUser – создание нового пользователя в Active Directory;
- Get-ADUser – выводит информацию о пользователях Active Directory;
- Set-ADUser — изменяет пользователя Active Directory;
- Remove-ADUser — удаляет пользователя Active Directory;
- New-ADGroup – командлет создает группу в Active Directory;
- Get-ADGroup – выводит информацию о группе или выполняет поиск, чтобы получить несколько групп из Active Directory;
- Set-ADGroup – командлет изменяет группу в Active Directory;
- Remove-ADGroup — удаление группы в Active Directory;
- Add-ADGroupMember — командлет добавляет учетные записи пользователей, компьютеров или групп в качестве новых членов группы Active Directory;
- Get-ADGroupMember — выводит информацию о членах группы Active Directory;
- Remove-ADGroupMember — удаление элементов из группы Active Directory;
- Set-ADAccountPassword — сброс пароля учетной записи Active Directory;
- Disable-ADAccount — отключает учетную запись Active Directory.
- Enable-ADAccount — включает учетную запись Active Directory;
- Unlock-ADAccoun — разблокирует учетную запись Active Directory;
- New-ADComputer — создание новой учетной записи компьютера в Active Directory;
- Get-ADComputer — выводит информацию об одном или нескольких компьютерах в Active Directory;
- Set-ADComputer — изменение учетной записи компьютера в Active Directory;
- Remove-ADComputer — удаление компьютера из Active Directory.
Description
The cmdlet creates a credential object for a specified user name and password. You
can use the credential object in security operations.
Beginning in PowerShell 3.0, you can use the Message parameter to specify a customized
message on the dialog box that prompts the user for their name and password.
The cmdlet prompts the user for a password or a user name and password. By default,
an authentication dialog box appears to prompt the user. However, in some host programs, such as the
PowerShell console, you can prompt the user at the command line by changing a registry entry. For
more information about this registry entry, see the notes and examples.
Работа с сетью в Windows PowerShell
Для администрирования сети в Windows PowerShell существуют такие командлеты как:
- Disable-NetAdapter – командлет отключает сетевой адаптер;
- Enable-NetAdapter – данный командлет включает сетевой адаптер;
- Rename-NetAdapter — переименовывает сетевой адаптер;
- Restart-NetAdapter — перезапускает сетевой адаптер;
- Get-NetIPAddress – выводит информацию о конфигурации IP-адреса;
- Set-NetIPAddress — изменяет конфигурацию IP-адреса;
- New-NetIPAddress — создает и настраивает IP-адрес;
- Remove-NetIPAddress — удаляет IP-адрес и его конфигурацию;
- Get-NetRoute — выводит таблицу маршрутизации IP;
- Set-NetRoute — изменяет таблицу маршрутизации IP;
- New-NetRoute — создает запись в таблице маршрутизации IP;
- Remove-NetRoute — удаляет одну или несколько записей (IP маршрутов) из таблицы маршрутизации IP;
- Get-NetIPv4Protocol — выводит информацию о конфигурации протокола IPv4;
- Get-NetIPv6Protocol — выводит информацию о конфигурации протокола IPv6;
- Get-NetIPInterface — выводит информацию о свойствах интерфейса IP;
- Get-NetTCPSetting — показывает информацию о настройках и конфигурации TCP;
- Test-Connection – командлет посылает ICMP пакеты к одному или нескольким компьютерам, т.е. «пингует» компьютеры.
Настройка на компьютере с macOS
-
Установите последнюю версию PowerShell. Дополнительные сведения см. в статье Установка PowerShell Core в macOS.
Убедитесь, что удаленное взаимодействие SSH включено, выполните следующие действия:
- Откройте среду .
- Щелкните .
- Установите флажок , чтобы задать .
- Разрешите доступ соответствующим пользователям.
-
Измените файл в расположении .
Используйте текстовый редактор, например nano:
Включите проверку подлинности с помощью пароля:
Добавьте запись подсистемы PowerShell:
Примечание
Расположение исполняемого файла PowerShell по умолчанию — . Расположение может различаться в зависимости от способа установки PowerShell.
При необходимости включите проверку подлинности на основе ключа:
-
Перезапустите службу sshd.
С гибридами очень сложно
Сложно быть отщепенцем в офисной команде — у вас в пять раз больше требований, и вас забывают позвать на обсуждения, все решается без вас, вы один понятия не имеете, что да почему. В общем, жизнь — боль.
У офисов-спутников тоже есть проблемы. Между офисами требований к связи в пять раз больше, а в самих офисах люди работают, как обычно. Если только офисы не работают почти независимо друг от друга, связь между ними пострадает.
Сложно создать процессы для требований к связи в таких командах. Это же вообще против человеческой природы. Я пойду на кухню попить водички и поболтаю с кем-нибудь между делом. А в Slack я про это ничего не напишу, потому что… ну, потому что мне в лом! Человек я или где?
Windows PowerShell 2.0 Remoting
Хотя вторая версия Windows PowerShell на момент написания статьи находится еще в состоянии бета тестирования, о её возможностях в области удалённого выполнения команд определённо стоит рассказать уже сейчас. Попробовать его своими руками вы можете либо загрузив предварительную версию (см. ссылки) либо в составе бета-версии Windows 7 или Windows Server 2008 R2.
Инфраструктура PowerShell Remoting основана на WinRM версии 2.0. И поэтому наследует все преимущества этой технологии, такие как шифрование передаваемых данных, и возможность работать по стандартным портам HTTP/HTTPS. Но благодаря богатым возможностям языка Windows PowerShell. И его способностям работы с объектами, мы получаем еще большие возможности. На данный момент пакет WinRM2.0 тоже находится в состоянии бета-тестирования, и доступен для загрузки только для систем Windows Vista и Windows 2008. В системы Windows 7 и Windows Server 2008R2 он будет встроен изначально, как и PowerShell 2.0.
Примечание:
Перед тем как воспользоваться всеми этими преимуществами, PowerShell Remoting необходимо активизировать, на управляющем, и управляемых компьютерах. Сделать это просто, запустив командлет (команду Windows PowerShell) Enable-PSRemoting. Причем если добавить ключ -Force то никаких подтверждений запрошено не будет. Этот командлет при необходимости вызовет winrs quickconfig, и создаст исключения в брандмауэре Windows, так что никаких дополнительных действий выполнять не нужно.
После этого вы сможете легко выполнять команды на других компьютерах используя командлет Invoke-Command (или его псевдоним icm):
Разумеется команду можно заранее поместить в переменную, а для параметра -ComputerName указать имена не одного, а сразу нескольких компьютеров. Следующая последовательность позволяет вывести версию файла Explorer.exe сразу с трех компьютеров.
Выполнить команду на удалённом компьютере
Как видно на, можно передавать сразу несколько команд в одном блоке, помещать их результаты выполнения на нескольких компьютерах в переменную, а затем обрабатывать на рабочей станции используя возможности Windows PowerShell по работе с объектами.
Впрочем возможности PowerShell Remoting на этом только начинаются. С помощью командлета Enter-PSSession вы можете войти в интерактивную сессию Windows PowerShell на удалённом компьютере. Выйти из такого сеанса можно использовав командлет Exit-PSSession, или просто exit.
Командлет New-PSSession создает сессии на удалённых компьютерах, указатели на которые можно поместить в переменную, а затем передавая её как аргумент для Invoke-Command выполнять команды сразу на нескольких компьютерах, в постоянном окружении. Пример вы можете увидеть на скриншоте, где я выполняю последовательность команд сразу на нескольких компьютерах из списка c:\computers.txt.
Выполнить команду на удалённом компьютере
Notes
You can use the PSCredential object that creates in cmdlets that request user
authentication, such as those with a Credential parameter.
By default, the authentication prompt appears in a dialog box. To display the authentication prompt
at the command line, add the ConsolePrompting registry entry
() and set its value to True.
If the ConsolePrompting registry entry does not exist or if its value is False, the
authentication prompt appears in a dialog box. For instructions, see the examples.
The ConsolePrompting registry entry works in the PowerShell console, but it does not
work in all host programs.
For example, it has no effect in the PowerShell Integrated Scripting Environment (ISE). For
information about the effect of the ConsolePrompting registry entry, see the help topics for the
host program.
The Credential parameter is not supported by all providers that are installed with PowerShell.
Beginning in PowerShell 3.0, it is supported on select cmdlets, such as the
and cmdlets.
Как дождаться завершения задания и получить результаты задания
Вы можете использовать командлеты задания PowerShell, такие как и, чтобы дождаться завершения задания, а затем вернуть все результаты, созданные заданием.
Следующая команда запускает задание потока, которое выполняет команду, затем ожидает завершения команды и возвращает все результаты данных, созданные командой.
Следующая команда запускает задание, которое выполняет команду для каждого входного значения, а затем ожидает завершения всех дочерних заданий и возвращает все результаты данных, созданные дочерними заданиями.
Командлет возвращает результаты дочерних заданий.
Так как каждое дочернее задание выполняется параллельно, порядок созданных результатов не гарантируется.
Работа со службами и процессами
PowerShell, конечно же, умеет управлять службами и процессами в Windows, для этого существуют такие командлеты как:
- Get-Process – выводит информацию о запущенных процессах на компьютере;
- Start-Process – запускает один или несколько процессов на компьютере;
- Stop-Process — останавливает один или несколько запущенных процессов;
- Get-Service – выводит информацию о службах;
- Restart-Service – перезапускает службу;
- Start-Service – запускает службу;
- Stop-Service — останавливает службу;
- Suspend-Service – приостанавливает работу службы;
- Set-Service – с помощью данного командлета можно изменить свойства службы, например, описание, отображаемое имя и режим запуска. Также его можно использовать для запуска, остановки или приостановки службы.
Другие командлеты Windows PowerShell
Также хотелось бы выделить следующие командлеты Windows PowerShell, которые наверняка Вам понадобятся и будут полезны.
- Get-ExecutionPolicy – с помощью данного командлета можно узнать действующую политику выполнения Windows PowerShell для текущего сеанса;
- Set-ExecutionPolicy – командлет изменяет политику выполнения Windows PowerShell;
- Write-Host – выводит информацию на экран (пишет текст);
- Read-Host – считывает строку ввода из консоли;
- Write-Warning – выводит предупреждающее сообщение;
- Write-Error – командлет объявляет ошибку и выводит ее в поток ошибок;
- Get-Date – возвращает текущую дату и время;
- Set-Date – командлет изменяет системную дату и время на компьютере.
Вот мы с Вами и рассмотрели полезные и часто используемые командлеты Windows PowerShell, надеюсь, этот справочник будет Вам полезен, удачи!
Запуск Windows PowerShell в более ранних версиях Windows How to Start Windows PowerShell on Earlier Versions of Windows
В этом разделе объясняется, как запустить Windows PowerShell и интегрированную среду скриптов Windows PowerShell (ISE) в Windows 7, Windows Server 2008 R2 и Windows Server 2008. This section explains how to start Windows PowerShell and Windows PowerShell Integrated Scripting Environment (ISE) on Windows 7, Windows Server 2008 R2, and Windows Server 2008. Кроме того, здесь поясняется, как включить дополнительный компонент Windows PowerShell ISE в Windows PowerShell 2.0 в ОС Windows Server 2008 R2 и Windows Server 2008. It also explains how to enable the optional feature for Windows PowerShell ISE in Windows PowerShell 2.0 on Windows Server 2008 R2 and Windows Server 2008.
Используйте любой из следующих методов для запуска установленной версии Windows PowerShell 3.0 или Windows PowerShell 4.0, где это возможно. Use any of the following methods to start the installed version of Windows PowerShell 3.0, or Windows PowerShell 4.0, where applicable.
В командной строке At the Command Prompt
Можно также использовать параметры программы powershell.exe для настройки сеанса. You can also use the parameters of the powershell.exe program to customize the session. Дополнительные сведения см. в статье Справка по командной строке PowerShell.exe. For more information, see PowerShell.exe Command-Line Help.
Пример удаленного взаимодействия PowerShell
Проще всего проверить удаленное взаимодействие на одном компьютере. В этом примере мы создадим удаленный сеанс с одним и тем же компьютером Linux. Командлеты PowerShell мы выполняем в интерактивном режиме, поэтому мы увидим запрос от SSH на проверку удаленного компьютера, а также запрос на ввод пароля. Чтобы убедиться, что удаленное взаимодействие работает, те же операции можно выполнить на компьютере Windows. Затем установите удаленное подключение между компьютерами, изменив имя узла.
Ограничения
-
Команда sudo не работает в рамках сеанса удаленного взаимодействия с компьютером Linux.
-
PSRemoting через SSH не поддерживает профили и не имеет доступа к . После входа в сеанс можно загрузить профиль с помощью вызова с точкой, указав полный путь к профилю. Это не связано с профилями SSH. Вы можете настроить SSH-сервер для использования PowerShell в качестве оболочки по умолчанию и для загрузки профиля через SSH. Дополнительные сведения см. в документации по SSH.
-
До PowerShell 7.1 удаленное взаимодействие по SSH не поддерживало удаленные сеансы со вторым прыжком. Эта возможность была ограничена сеансами через WinRM. PowerShell 7.1 позволяет и работать в любом интерактивном удаленном сеансе.
WMIC
Для управления системами Windows с помощью разных графических утилит часто используется WMI (Windows Management Instrumentation) ― реализация объектно-ориентированного стандарта управления WBEM. В качестве утилиты с графическим интерфейсом для работы с WMI можно использовать wbemtest.exe.
Для работы с WMI из консоли создана wmic.exe. Например, для проверки установленных обновлений вместо жутковатой конструкции из предыдущего примера можно использовать простую команду:
Использовать список компьютеров также можно командой /node:»@computers.txt».
Еще при помощи WMI можно запускать программы – синтаксис предельно прост:
К сожалению, в отличие от Psexec, получить вывод в консоли не получится ― придется выводить результаты команды в файл.
По умолчанию процесс на удаленной машине выполняется от имени пользователя, запустившего wmic. При необходимости логин и пароль можно задать явно.
Шаг 1: Открываем терминал
Обычно в ОС уже есть какой-то терминал, и для начала можно использовать его. Если хочется больше функций и возможностей кастомизации, то есть из чего выбирать. Некоторые терминалы позволяют открывать вкладки, разделять экран и даже рендерить картинки. Можно найти на любой вкус, например, стилизованный под старый ламповый монитор.
cool-retro-terminal
Выбор терминала — это тема для отдельной статьи. Кратко: если у вас Linux, начните с . На macOS популярен iTerm2, но я его не использовал, поэтому не могу ни поругать, ни похвалить.
Для меня важно чтобы и на компьютере с Linux, и на рабочем ноутбуке с macOS был один и тот же терминал с одинаковыми настройками. Я выбирал среди кроссплатформенных и остановился на kitty
Остановка процессов (Stop-Process)
Windows PowerShell позволяет гибко выводить списки процессов, но как обстоят дела с остановкой процесса?
Командлет принимает имя или идентификатор, указывающие останавливаемый процесс. Возможность остановки процессов зависит от ваших разрешений. Некоторые процессы остановить нельзя. Например, при попытке остановить неактивный процесс возникает ошибка:
Можно также принудительно вывести запрос с помощью параметра Confirm. Он особенно удобен при использовании подстановочного знака в имени процесса, так как случайно может быть определено соответствие с некоторыми процессами, которые не нужно останавливать:
Сложную обработку процессов можно реализовать с помощью командлетов фильтрации объектов. Так как объект Process имеет свойство Responding, которое равно true, если он перестал отвечать, вы можете остановить все неотвечающие приложения с помощью следующей команды:
Аналогичный подход возможен и в других ситуациях. Предположим, например, что приложение дополнительной области уведомлений запускается автоматически при открытии другого приложения. Эта процедура может работать неправильно в сеансах служб терминалов, однако вам все равно нужно сохранить ее в сеансах, выполняемых в консоли физического компьютера. Сеансы, подключенные к рабочему столу физического компьютера, всегда имеют идентификатор сеанса 0, поэтому можно остановить все экземпляры процесса, находящиеся в других сеансах, с помощью и SessionId процесса:
Командлет не использует параметр ComputerName. Поэтому для выполнения команды остановки процесса на удаленном компьютере необходимо использовать командлет . Например, чтобы остановить процесс PowerShell на удаленном компьютере Server01, введите:
Использование локальных переменных с параметром ArgumentList
Локальные переменные можно использовать в удаленной команде, определяя параметры для удаленной команды и используя параметр ArgumentList командлета, чтобы указать локальную переменную в качестве значения параметра.
-
Используйте ключевое слово для определения параметров удаленной команды. Имена параметров — это заполнители, которые не обязательно должны совпадать с именем локальной переменной.
-
Используйте параметры, определенные ключевым словом в команде.
-
Используйте параметр ArgumentList командлета, чтобы указать локальную переменную в качестве значения параметра.
Например, следующие команды определяют переменную в локальном сеансе и затем используют ее в удаленной команде. Команда использует в качестве значения имени параметра и локальной переменной .
PsExec
Одним из отличных решений поставленной в заголовке задачи является использование программы PsExec от великого Марка Руссиновича.
Программа работает по клиент-серверному принципу: на локальной машине выполняется клиент, который посылает команды серверу на удаленном компьютере. Особенностью этой программы является то, что серверная часть устанавливается автоматически непосредственно перед выполнением команды, а затем удаляется. Таким образом для выполнения команд на удаленных машинах достаточно иметь на них административные права.
Если PsExec запускается от имени администратора, который входит в тот же домен, что и удаленны компьютер, то никаких учетных данных даже вводить не нужно. В противном случае, их можно указать в командной строке, либо PsExec сама их запросит. PsExec работает на ОС начиная с Windows 2000 и заканчивая 64-битным Windows Server 2008 R2.
Очень полезными в PsExec являются следующие возможности:
- Выполнение команды на группе компьютеров. Пример: следующая команда позволяет принудительно применить самые свежие групповые политики: psexec @group.txt gpupdate /force
- Выполнение команд от имени системной учетной записи. Пример: следующая команда заставит удаленную систему принудительно проверить обновления: psexec \computer -s wuauclt /detectnow
- Копирование выполняемой программы на удаленный компьютер перед выполнением. Пример: следующая команда позволит обновить членство данного компьютера в группе безопасности Active Directory (токен доступа) без перезагрузки: psexec \computer -c -s klist.exe purge
Трудно переоценить пользу этой программы, если использовать скрипты и возможности консольных команд, встроенных в Windows.
Можно ли ограничить команды, которые пользователи могут запускать удаленно на моем компьютере?
Да. Каждый удаленный сеанс должен использовать одну из конфигураций сеанса на удаленном компьютере. Вы можете управлять конфигурациями сеансов на компьютере (и разрешениями для этих конфигураций сеанса), чтобы определить, кто может выполнять команды удаленно на компьютере и какие команды они могут выполняться.
Конфигурация сеанса настраивает среду для сеанса. Конфигурацию можно определить с помощью сборки, реализующей новый класс конфигурации, или с помощью скрипта, выполняемого в сеансе. Конфигурация может определять команды, доступные в сеансе. Кроме того, конфигурация может включать параметры, защищающие компьютер, такие как параметры, ограничивающие объем данных, которые сеанс может получить удаленно, в одном объекте или команде. Можно также указать дескриптор безопасности, который определяет разрешения, необходимые для использования конфигурации.
Командлет создает конфигурации сеансов по умолчанию на компьютере: Microsoft. PowerShell, Microsoft. PowerShell. Workflow и Microsoft. PowerShell32 (только 64-разрядные операционные системы). Задает дескриптор безопасности для конфигурации, чтобы разрешить использовать их только членам группы «Администраторы» на компьютере.
Командлеты конфигурации сеанса можно использовать для изменения конфигураций сеансов по умолчанию, создания новых конфигураций сеансов и изменения дескрипторов безопасности всех конфигураций сеансов.
Начиная с Windows PowerShell 3,0, командлет позволяет создавать пользовательские конфигурации сеансов с помощью текстового файла. Файл содержит параметры для настройки языкового режима и для указания командлетов и модулей, доступных в сеансах, использующих конфигурацию сеанса.
Когда пользователи используют командлеты,, или , они могут использовать параметр configurationName для указания конфигурации сеанса, используемой для сеанса. Кроме того, они могут изменить конфигурацию по умолчанию, которую используют сеансы, изменив значение переменной предпочтений в сеансе.
Дополнительные сведения о конфигурациях сеансов см. в справке по командлетам конфигурации сеанса. Чтобы найти командлеты конфигурации сеанса, введите:
Назначенные задания
Довольно интересный способ, заслуживающий право на жизнь. Назначенные задания можно создавать из командной строки при помощи утилиты schtasks.exe, выполнять их, затем удалять. Подробнее с синтаксисом можно ознакомиться в документации, я же разберу пример использования назначенных заданий в доменной среде. Предположим, нам нужно выполнить команду как можно быстрее вне зависимости от того, выключен компьютер или нет. Для этого используются так называемые предпочтения групповых политик (Group Policy Preference).
Искать установку назначенных заданий следует в конфигурации компьютера или пользователя ? «Настройка ? Параметры панели управления ? Назначенные задания».
Создание нового назначенного задания.
Для выполнения команды или скрипта ASAP понадобится создать «Немедленную задачу (Windows 7 и выше)». Если вдруг в инфраструктуре остались машины под управлением Windows XP, то подойдет «Очередное задание (Windows XP)».
Стоит сделать несколько политик с соответствующими WMI-фильтрами или создать два разных назначенных задания в одной политике с нацеливанием ? например, при помощи того же WMI-фильтра. Это поможет избежать конфликтов в разнородной среде со старыми и новыми Windows.
Пример WMI-фильтра для применения политики только на компьютерах с Windows XP:
В остальном процедура создания назначенного задания тривиальна. Единственное, не забывайте отметить пункт «Применить один раз и не применять повторно», если задача не требует повторного запуска.
Запускаем немедленную задачу только один раз.
При использовании таких назначенных заданий программа запустится, как только компьютер получит обновление групповой политики. Это удобно: не нужно проверять доступность компьютеров в случае Psexec и wmic и заставлять пользователей перезагружать машины, как в случае скриптов групповых политик. При необходимости можно скопировать файл скрипта локально в разделе «Настройка ? Конфигурация Windows ? Файлы».
Назначенные задания позволяют явно задать имя пользователя для запуска программы, в том числе и для SYSTEM.