- Как перезапустить powershell windows
- Удаленная перезагрузка компьютера
- Перезагрузка компьютера с задержкой по времени
- Скрипт PowerShell для перезагрузки по расписанию
- Как выключить или перезагрузить компьютер в Windows PowerShell
- PowerShell: Как остановить, запустить и перезапустить службу
- Как перезагрузить компьютер удаленно через Powershell
- В чем могут быть проблемы при удаленной перезагрузки компьютера
Как перезапустить 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 конструкцию будет выглядеть таким образом:
Как видим команда успешно отработала и была произведена перезагрузка компьютера.
Если вы хотите перезагрузить удаленный компьютер от имени определенного пользователя, то данный командлет вам это позволит сделать. Для этого введите:
В результате у вас появится окно для ввода пароля пользователя, указываем его и нажимаем «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, чтобы выполнять его в нужное время, но с уведомлением человека. Ниже текст скрипта.
$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.
И так на сегодня наш комендлет «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 не осуществляет проверку подлинности и из-за этого такой вариант не рекомендуется.
Если у вас все же не получается перезагрузить компьютер, попробуйте прочитать эту статью.