Как перезапустить powershell windows

Как перезапустить powershell windows

Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов рунета Pyatilistnik.org. В прошлый раз мы с вами разбирали перезагрузку сервера из командной строки, в данной публикации я хочу вас научить обычной и удаленной перезагрузке компьютера средствами PowerShell, который прочно вошел в нашу жизнь. Уверен, что вы сами сможете определить себе сценарии, которые сможете использовать в своей практике.

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

Открываем окно PowerShell в режиме администратора и знакомимся с командлетом Restart-Computer.Первое, что я вам советую сделать, это ознакомиться со справкой командлета, для этого введите:

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

Как видим компьютер уходит в перезагрузку.

Так же можно использовать команду с добавлением ключа -ComputerName

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

Удаленная перезагрузка компьютера

Как я и говорил ранее PowerShell, это прекрасный инструмент по удаленному управлению компьютерами, серверами и службами. Предположим, что у меня есть RDS ферма состоящая из 10 серверов с Windows Server 2019. Мне необходимо произвести обслуживание четырех серверов, для этого я перевожу их в режим стока (Drain Mode) чтобы отсечь новые подключения, и рассылаю уведомление сотрудникам, через msg, чтобы сотрудники перелогинились. После я начинаю обслуживать данные системы, когда я заканчиваю, то мне необходимо их перезагрузить. Для этого мы воспользуемся вот такой конструкцией:

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

+ CategoryInfo : OperationStopped: (w10-cl02:String) [Restart-Computer], InvalidOperationException
+ FullyQualifiedErrorId : RestartcomputerFailed,Microsoft.PowerShell.Commands.RestartComputerCommand

Restart-Computer : Не удалось перезагрузить компьютер w10-cl03 со следующим сообщение об ошибке: Невозможно инициировать завершение работы системы, так как компьютер используется другими пользователями.
строка:1 знак:1
+ Restart-Computer -ComputerName w10-cl02, w10-cl03
+

+ CategoryInfo : OperationStopped: (w10-cl03:String) [Restart-Computer], InvalidOperationException
+ FullyQualifiedErrorId : RestartcomputerFailed,Microsoft.PowerShell.Commands.RestartComputerCommand


Тут вся загвоздка в том, что за компьютерами остались активные сессии работающих пользователей, именно в интерактивном режиме. В таких случаях, если они не вышли и не реагируют на ваши сообщения, вы можете принудительно произвести перезагрузку компьютера с чистой совестью. Для этого можно использовать ключ -Force, в результате PowerShell конструкцию будет выглядеть таким образом:

Читайте также:  Windows не видит рабочую флешку

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

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

В результате у вас появится окно для ввода пароля пользователя, указываем его и нажимаем «Ok». Кстати если на удаленном компьютере, который требуется перезагрузить, будет активная сессия пользователя в интерактивном режиме, то вам так же выскочит ошибка, что «компьютер используется другими пользователями» и вам нужно будет добавлять ключик -Force:

В логах Windows на тех компьютерах, в журнале система, вы сможете обнаружить событие с кодом ID 1074(/kak-uznat-kto-perezagruzil-server-windows/), в котором вы увидите, кто перезагрузил систему:

Предположим, что у вас есть список компьютеров, которые требуется удаленно перезагрузить. В такой ситуации сам Бог велел использовать PowerShell. Структура файла выглядит очень просто, обычный текстовый документ, формата txt. На каждой строке по одному имени компьютера, без запятых. Я положил его в корень диска C:\.


Для того, чтобы прочитать данный файл есть командлет Get-Content и конструкция команды принимает вот такой вид:

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


Перезагрузка компьютера с задержкой по времени

Еще очень частая ситуация, это перезапуск компьютера, но через определенное время, предположим, через 60 секунд, чтобы какие-то другие вещи успели отработать, очень часто применяется в сценариях и скриптах. Для выполнения это задачи есть командлет Start-Sleep. Пишем команду:

В ключе -Seconds вы задаете время в секундах.


так же у вас есть возможность определить механизм, который используется для аутентификации учетных данных пользователя. Этот параметр был введен в Windows PowerShell 3.0. Называется этот ключ -WsmanAuthentication. На выбор у вас будет пять вариантов: Basic, CredSSP, Default, Digest, Kerberos и Negotiate.

В моем примере я буду использовать проверку подлинности Kerberos, напоминаю, что для этого у вас на удаленных компьютерах должна быть настроена служба WinRM и политика, определяющая с каких ip-адресов вы можете производить подключение к ней. В итоге команда принимает такой вид:

После ее выполнения удаленные компьютеры уходят в перезагрузку.

Скрипт PowerShell для перезагрузки по расписанию

Предположим, что вам нужно перезагрузить компьютер по расписанию, это можно сделать и групповыми политиками, а так же и через задачу по расписанию, актуально для компьютеров не в домене. Вы в задаче подкладывает ваш скрипт PowerShell, чтобы выполнять его в нужное время, но с уведомлением человека. Ниже текст скрипта.

Читайте также:  Дистрибутив directx 10 для windows

$wshell.Popup(«Данный компьютер будет перезагружен»,10,»Сохраните свои данные»,0x0)

$wshell.Popup(«Перезагрузка будет через 30 секунд»,2,»Не забудьте сохранить данные»,0x0)

Restart-Computer -ComputerName w10-cl01

Еще бонусом перезагрузка локального компьютера может быть выполнена и с помощью WMI. Для этого в оболочке PowerShell введите;

Как выключить или перезагрузить компьютер в Windows PowerShell

В данной статье показаны действия, с помощью которых можно выключить или перезагрузить компьютер в Windows PowerShell.

Операционная система Windows имеет много различных способов для выключения или перезагрузки компьютера. Например, можно выключить или перезагрузить компьютер используя меню Пуск, меню WinX, в командной строке, в окне Выполнить, а также в окне Завершение работы Windows вызываемое нажатием клавиш Alt + F4 или создав специальный ярлык и т.д.

Чтобы выключить компьютер, запустите Windows PowerShell от имени администратора и выполните следующую команду:

Чтобы перезагрузить компьютер, запустите Windows PowerShell от имени администратора и выполните команду:

Также для выключения или перезагрузки можно использовать метод Win32Shutdown из класса WMI Win32_OperatingSystem. В качестве аргумента можно использовать флаги из списка ниже:

  • 0 – Log Off
  • 4 – Forced Log Off
  • 1 – Shutdown
  • 5 – Forced Shutdown
  • 2 – Reboot
  • 6 – Forced Reboot
  • 8 – Power Off
  • 12 – Forced Power Off

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

(Get-WmiObject Win32_OperatingSystem -EnableAllPrivileges).Win32Shutdown(1)

Чтобы перезагрузить компьютер выполните команду:

(Get-WmiObject Win32_OperatingSystem -EnableAllPrivileges).Win32Shutdown(2)

Чтобы произвести выход из системы, выполните команду:

(Get-WmiObject Win32_OperatingSystem -EnableAllPrivileges).Win32Shutdown(0)

И ещё в качестве дополнения несколько различных команд для выключения и перезагрузки компьютера используя консоль Windows PowerShell.

При помощи следующей команды можно одновременно выключить два удалённых компьютера:

Stop-Computer -ComputerName «Server01», «Server02»

Следующая команда демонстрирует как перезагрузить два удалённых компьютера с именами Server01 и Server02 и локальный компьютер, идентифицированный как localhost .

Restart-Computer -ComputerName «Server01», «Server02», «localhost»

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

Start-Sleep -Seconds 60; Stop-Computer

Следующая команда задаёт время (в секундах) перед перезагрузкой компьютера.

Start-Sleep -Seconds 60; Restart-Computer

Дополнительную справочную информацию по командлету Restart-Computer можно посмотреть на сайте Microsoft по этой ссылке, а справку по командлету Stop-Computer смотрите здесь. На этом всё.

PowerShell: Как остановить, запустить и перезапустить службу

Большинство пользователей боятся консоли и команд, отдавая предпочтение в сторону графического интерфейса, но я не такой, я люблю автоматизацию .\

Регулярно приходится приходится что-то автоматизировать и что-то перезапускать. Так что без PowerShell я как без рук.

Сегодня хочу поговорить о службах Windows, остановка запуск и перезапуск будет выполняться средствами PowerShell.

Читайте также:  Windows 2003 group policy client side extensions

И так на сегодня наш комендлет «Get-Service».

И так первым делом отобразим список всех служб Windows, для этого достаточно выполнить:

Данный командлет выведет список всех служб их статус и имя

Дальше усложняем задачу, выведем все службы, которые запущенны:

Будет как-то так

С командлетом «Get-Service», пока все, а дальше будем Запускать останавливать и перезапускать используя Start-Service, Stop-Service, Restart-Service. Какой для чего думаю не стоит объяснять .

Давайте попробуем остановить службу по имени BITS или отображаемому имени «Background Intelligent Transfer Service»

В Windows есть имя и Экранное имя, первое короткое и занимает мало букв, второе это отображаемый синоним, т.е. полное наименование, лично я предпочитаю пользоваться коротким именем сервиса.

Запустить и перезупустсть можно антологичным способом

Отобразить текущий статус службы можно так:

Как перезагрузить компьютер удаленно через Powershell

В Powershell есть возможность удаленного выполнения команд. Этот механизм я описывал в этой статье. Если вы никогда не исполняли командлеты типа Invoke-Command или New-PSSession я попробую вкратце объяснить.

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

Где:
$cred — переменная, которая хранит учетные данные (логин/пароль). Она не обязательна, если вы администратор на удаленном компьютере
-ComputerName — имя компьютера, который будем перезагружать
-ScriptBlock — значит, что мы посылаем команду перезагрузки

Второй вариант такой:

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

В чем могут быть проблемы при удаленной перезагрузки компьютера

Если вы находитесь в домене, то удаленные команды Powershell должны выполнится при условии, что у вас запущен WinRM, а он запускается так:

Вы так же должны быть с полномочиями администратора удаленного компьютера (по умолчанию WinRM работает так). Если вместо имени компьютера вы используете IP или вы не в домене, то вы используете не Kerberos, а NTLM и он по умолчанию выключен. Для этого вам нужно либо выпустить SSL сертификат, либо должны выполнить такую команду:

Где вместо 192.168.3.134 должны вписать IP компьютера к которому хотите подключиться. Можно сделать и так:

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

Если у вас все же не получается перезагрузить компьютер, попробуйте прочитать эту статью.

Оцените статью