Как перезагрузить компьютер через powershell
Перейти к содержимому

Как перезагрузить компьютер через powershell

  • автор:

Restart-Computer

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

Синтаксис

Restart-Computer [-WsmanAuthentication ] [[-ComputerName] ] [[-Credential]] [-Force] [-Wait] [-Timeout ] [-For ] [-Delay ] [-WhatIf] [-Confirm] []

Описание

Этот командлет доступен только на платформе Windows.

Командлет Restart-Computer перезапускает операционную систему на локальных и удаленных компьютерах.

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

Начиная с Windows PowerShell 3.0, вы можете ждать завершения перезагрузки перед выполнением следующей команды. Укажите интервал ожидания ожидания и интервал запроса и дождитесь доступности определенных служб на перезагруженном компьютере. Эта функция делает его практическим для использования Restart-Computer в скриптах и функциях.

Примеры

Пример 1. Перезапуск локального компьютера

Restart-Computer перезапускает локальный компьютер.

Restart-Computer

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

Restart-Computer может перезапустить удаленные и локальные компьютеры. Параметр ComputerName принимает массив имен компьютеров.

Restart-Computer -ComputerName Server01, Server02, localhost

Пример 3. Получение имен компьютеров из текстового файла

Restart-Computer получает список имен компьютеров из текстового файла и перезапускает компьютеры. Параметр ComputerName не указан. Но так как это первый параметр позиции, он принимает имена компьютеров из текстового файла, отправляемого по конвейеру.

Get-Content -Path C:\Domain01.txt | Restart-Computer

Get-Content использует параметр Path для получения списка имен компьютеров из текстового файла Domain01.txt. Имена компьютеров отправляются по конвейеру. Restart-Computer перезапускает каждый компьютер.

Пример 4. Принудительное перезапуска компьютеров, перечисленных в текстовом файле

В этом примере выполняется немедленный перезапуск компьютеров, перечисленных в Domain01.txt файле. Имена компьютеров из текстового файла хранятся в переменной. Параметр Force вызывает немедленный перезапуск.

$Names = Get-Content -Path C:\Domain01.txt $Creds = Get-Credential Restart-Computer -ComputerName $Names -Credential $Creds -Force

Get-Content использует параметр Path для получения списка имен компьютеров из текстового файла Domain01.txt. Имена компьютеров хранятся в переменной $Names . Get-Credential запрашивает имя пользователя и пароль и сохраняет значения в переменной $Creds . Restart-Computer использует параметры ComputerName и Credential со своими переменными. Параметр Force приводит к немедленному перезапуску каждого компьютера.

Пример 6. Перезагрузка удаленного компьютера и ожидание powerShell

Restart-Computer перезапускает удаленный компьютер, а затем ожидает до 5 минут (300 секунд) для того, чтобы PowerShell стал доступным на перезагрузленном компьютере, прежде чем он продолжит работу.

Restart-Computer -ComputerName Server01 -Wait -For PowerShell -Timeout 300 -Delay 2

Restart-Computer использует параметр ComputerName для указания Server01. Параметр wait ожидает завершения перезагрузки. Параметр For указывает, что PowerShell может выполнять команды на удаленном компьютере. Параметр Timeout задает пятиминутное ожидание. Параметр «Задержка » запрашивает удаленный компьютер каждые две секунды, чтобы определить, перезапускается ли он.

Пример 7. Перезапуск компьютера с помощью WsmanAuthentication

Restart-Computer перезапускает удаленный компьютер с помощью механизма WsmanAuthentication . Проверка подлинности Kerberos определяет, имеет ли текущий пользователь разрешение на перезапуск удаленного компьютера. Дополнительные сведения см. в разделе AuthenticationMechanism.

Restart-Computer -ComputerName Server01 -WsmanAuthentication Kerberos

Restart-Computer использует параметр ComputerName для указания удаленного компьютера Server01 . Параметр WsmanAuthentication указывает метод проверки подлинности как Kerberos.

Параметры

-ComputerName

Указывает одно имя компьютера или разделенный запятыми массив имен компьютеров. Restart-Computer принимает объекты ComputerName из конвейера или переменных.

Введите имя NetBIOS, IP-адрес или полное доменное имя удаленного компьютера. Чтобы указать локальный компьютер, введите имя компьютера, точку . или localhost.

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

Если параметр ComputerName не указан, Restart-Computer перезагрузит локальный компьютер.

Type: String [ ]
Aliases: CN, __SERVER, Server, IPAddress
Position: 0
Default value: None
Required: False
Accept pipeline input: True
Accept wildcard characters: False

-Confirm

Запрашивает подтверждение перед выполнением Restart-Computer .

Type: SwitchParameter
Aliases: cf
Position: Named
Default value: False
Required: False
Accept pipeline input: False
Accept wildcard characters: False

-Credential

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

Введите имя пользователя, например User01 или Domain01\User01, или введите объект PSCredential, созданный командлетом Get-Credential . Если ввести имя пользователя, вам будет предложено ввести пароль.

Учетные данные хранятся в объекте PSCredential , а пароль хранится как SecureString.

Дополнительные сведения о защите данных SecureString см. в разделе «Как безопасна Защита SecureString?».

Type: PSCredential
Position: 1
Default value: Current user
Required: False
Accept pipeline input: False
Accept wildcard characters: False

-Delay

Указывает частоту запросов в секундах. PowerShell запрашивает службу, указанную параметром For , чтобы определить, доступна ли служба после перезагрузки компьютера.

Этот параметр действителен только вместе с параметрами Wait и For .

Этот параметр впервые появился в Windows PowerShell 3.0.

Если параметр Delay не указан, Restart-Computer используется пять секунд задержки.

Type: Int16
Position: Named
Default value: None
Required: False
Accept pipeline input: False
Accept wildcard characters: False

-For

Указывает поведение PowerShell по мере ожидания доступности указанной службы или компонента после перезагрузки компьютера. Этот параметр действителен только с параметром Wait .

Допустимые значения для этого параметра:

  • По умолчанию: ожидает перезапуска PowerShell.
  • PowerShell: может выполнять команды в удаленном сеансе PowerShell на компьютере.
  • WMI: получает ответ на запрос Win32_ComputerSystem компьютера.
  • WinRM: может установить удаленный сеанс на компьютере с помощью WS-Management.

Этот параметр впервые появился в Windows PowerShell 3.0.

Type: WaitForServiceTypes
Accepted values: Wmi, WinRM, PowerShell
Position: Named
Default value: None
Required: False
Accept pipeline input: False
Accept wildcard characters: False

-Force

Принудительно перезагрузит компьютер немедленно.

Type: SwitchParameter
Aliases: f
Position: Named
Default value: None
Required: False
Accept pipeline input: False
Accept wildcard characters: False

-Timeout

Указывает время ожидания в секундах. Когда истекает время ожидания, вернется в командную строку, Restart-Computer даже если компьютеры не перезагрузились.

Параметр Timeout действителен только с параметром Wait . Время ожидания переопределяет неопределенный период ожидания параметра Wait .

Этот параметр впервые появился в Windows PowerShell 3.0.

Type: Int32
Aliases: TimeoutSec
Position: Named
Default value: None
Required: False
Accept pipeline input: False
Accept wildcard characters: False

-Wait

Restart-Computer подавляет запрос PowerShell и блокирует конвейер до перезапуска компьютеров. Этот параметр можно использовать в скрипте для перезагрузки компьютеров, а затем продолжить обработку после завершения перезагрузки.

Параметр wait ожидает неограниченное время перезапуска компьютеров. Время ожидания можно использовать для настройки времени и параметров for and Delay, чтобы ждать, пока определенные службы будут доступны на перезагруженных компьютерах.

Параметр Wait недействителен при перезапуске локального компьютера. Если значение параметра ComputerName содержит имена удаленных компьютеров и локального компьютера, Restart-Computer создается несрочная ошибка ожидания на локальном компьютере, но ожидает перезапуска удаленных компьютеров.

Этот параметр впервые появился в Windows PowerShell 3.0.

Type: SwitchParameter
Position: Named
Default value: None
Required: False
Accept pipeline input: False
Accept wildcard characters: False

-WhatIf

Показывает, что произойдет, если выполняется Restart-Computer . Командлет Restart-Computer не выполняется.

Type: SwitchParameter
Aliases: wi
Position: Named
Default value: False
Required: False
Accept pipeline input: False
Accept wildcard characters: False

-WsmanAuthentication

Указывает механизм, используемый для проверки подлинности учетных данных пользователя. Этот параметр впервые появился в Windows PowerShell 3.0.

Допустимые значения для этого параметра: Basic, CredSSP, Default, Digest, Kerberos и Negotiate.

Дополнительные сведения см. в разделе AuthenticationMechanism.

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

Type: String
Accepted values: Basic, CredSSP, Default, Digest, Kerberos, Negotiate
Position: Named
Default value: None
Required: False
Accept pipeline input: False
Accept wildcard characters: False

Входные данные

Можно передать строку, содержащую имя компьютера в этот командлет.

Выходные данные

None

Этот командлет не возвращает выходные данные.

Примечания

  • В Windows Restart-Computer используется метод Win32Shutdown класса инструментария управления Windows (WMI) Win32_OperatingSystem . Для этого метода требуется включить привилегию SeShutdownPrivilege для учетной записи пользователя, используемой для перезапуска компьютера.
  • В Linux и Mac OS Restart-Computer используется /sbin/shutdown средство bash.

Связанные ссылки

  • Сведения о удаленном управлении Windows
  • Get-Credential
  • Протокол WS-Management

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Изменение состояния компьютера

Этот пример применяется только к платформам Windows.

Чтобы вернуть компьютер в исходное состояние в PowerShell, используйте стандартную программу командной строки, инструментарий WMI или класс CIM. Хотя PowerShell используется только для запуска программы, сведения об изменении состояния электропитания для компьютера в PowerShell иллюстрируют некоторые важные особенности работы с внешними средствами в PowerShell.

Блокировка компьютера

Единственным способом непосредственной блокировки компьютера с помощью стандартных средств является вызов функции LockWorkstation() в user32.dll:

rundll32.exe user32.dll,LockWorkStation 

Эта команда немедленно блокирует рабочую станцию. Он используется rundll32.exe для вызова LockWorkStation функции в user32.dll .

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

Чтобы завершить работу конкретных сеансов на сервере терминалов, используйте программу командной строки tsshutdn.exe.

Ведение журнала с текущего сеанса

Выйти из сеанса в локальной системе можно несколькими способами. Самый простой заключается в использовании программы командной строки удаленного рабочего стола или служб терминалов — logoff.exe (для получения дополнительных сведений введите logoff /? в командной строке PowerShell). Чтобы выйти из текущего активного сеанса, введите logoff без аргументов.

Можно также использовать средство shutdown.exe с параметром выхода:

shutdown.exe -l 

Еще один вариант — использование инструментария WMI. Класс Win32_OperatingSystem имеет метод Shutdown. Вызов метода с флагом 0 инициирует выход из системы:

Дополнительные сведения см. в методе Shutdown класса Win32_OperatingSystem.

Get-CimInstance -ClassName Win32_OperatingSystem | Invoke-CimMethod -MethodName Shutdown 

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

Завершение работы и перезапуск компьютеров аналогичны задачам. Большинство средств командной строки поддерживают оба действия. Windows включает два средства командной строки для перезагрузки компьютера. tsshutdn.exe shutdown.exe Используйте либо с соответствующими аргументами. Подробные сведения об использовании можно получить, запустив tsshutdn.exe /? или shutdown.exe /? .

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

Чтобы завершить работу компьютера, используйте Stop-Computer команду

Stop-Computer 

Чтобы перезапустить операционную систему, используйте команду Restart-Computer.

Restart-Computer 

Чтобы выполнить немедленную перезагрузку компьютера, используйте параметр -Force.

Restart-Computer -Force 

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

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

date

10.01.2023

user

itpro

directory

PowerShell, Windows 10, Windows 11, Windows Server 2019, Windows Server 2022

comments

комментариев 19

В Windows доступно несколько команд, которые позволяют выключить или перезагрузить локальный или удаленный компьютер. В этой статье мы рассмотрим, как использовать команду shutdown и PowerShell командлеты Restart-Computer и Stop-Computer для выключения/перезагрузки Windows.

Использование команды shutdown в Windows

Утилита командной строки shutdown является встроенной командой Windows, которая позволяет перезагрузить, выключить компьютер, перевести его в спящий режим или завершить сеанс пользователя. В этой инструкции мы покажем основные примеры использования команды shutdown в Windows (все рассмотренные команды запускаются в окне Выполнить — Win+R ->, в командной строке cmd.exe или в консоли PowerShell).

Команда shutdown имеет следующий синтаксис:

shutdown [/i | /l | /s | /sg | /r | /g | /a | /p | /h | /e | /o] [/hybrid] [/soft] [/fw] [/f] [/m \\компьютер][/t xxx][/d [p|u]xx:yy [/c «комментарий»]]

команда shutdown синтаксис

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

Выключение Windows командой Shutdown

Для выключения ОС Windows и компьютера необходимо использовать команду shutdown с ключом /s.

Перезагрузка Windows

Чтобы перезагрузить компьютер, необходимо добавить параметр /r. После выполнения этой команды Windows корректно перезагрузится.

shutdown /r - перезагрузка компьютера

Завершение сеанса пользователя

Чтобы завершить текущую сессию пользователя (logout), нужно выполнить команду:

shutdown /l завершение сенаса пользоватеоя

Эта команда аналогично выполнению команды logoff.

Перевод компьютера в режим гибернации

Для перевода компьютер в режим гибернации (в этом режиме все содержимое памяти записывается в файл hyberfil.sys на диск и компьютер переходит в спящий режим с пониженным электропотреблением), выполните команду:

Перезагрузка компьютера с сообщением пользователям

Вы можете предупредить всех пользователей Windows о предстоящем выключении / перезагрузки компьютера или сервера, отправив сообщение во все активные сессии (как правило эта возможность используется на терминальных RDS серверах, за которыми одновременно работают несколько пользователей, каждый в своей собственной RDP сессии).

shutdown /r /c “Этот сервер будет перезагружен через 60 секунд.”

Отложенное выключение / перезагрузка компьютера

Можно выключить или перезагрузить компьютер с определенной задержкой (по таймеру). С помощью опции /t можно указать интервал времени (в секундах), через который ПК/сервер будет перезагружен или выключен. Тем самым вы можете предоставить пользователям дополнительное время для того, чтобы успеть сохранить открытые файлы и корректно закрыть приложения. Эту опцию удобно использовать совместно с отправкой сообщения. В этом примере мы указываем, что Windows будет выключена через 10 минут (600 секунд) и информируем пользователей сообщением.

shutdown /s /t 600 /c «Сервер будет выключен через 10 минут. Сохраните свои документы!»

Пользователю будет выдано предупреждение о запланированном выключении: Ваш сеанс будет завершен.

shutdown - Ваш сеанс будет завершен.

Такую команду удобно использовать для оповещения пользователей с сеансами на RDSH хостах в ферме Remote Desktop Services на Windows Server, когда вы хотите перезагрузить сервер для выполнения обслуживания. Можно использовать совместно с режимом обслуживания RDS (Drain Mode).

Если задержка очень длительная, например, 100 минут (6000 секунд), то вместо предупреждающего окна появляется всплывающее сообщение в нижнем правом углу экрана: «Ваш сеанс будет завершен. Работа Windows будет завершена через 100 мин».

Работа Windows будет завершена через 100 мин

Отмена выключения / перезагрузки компьютера

После запуска команды выключения или перезагрузки Windows, по умолчанию утилита shutdown ожидает 60 секунд, не выполняя никаких действия. Администратор может отменить перезагрузку или выключение устройства, если в течении этого времени успеет выполнить команду:

После отмены выключения появится всплывающее сообщение в нижнем правом углу экрана: «Выход из системы отменен. Запланировано завершение работы отменено».

shutdown /a - отмена перезагрузки Выход из системы отменен

Перезагрузить Windows немедленно

Чтобы выключить или перезагрузить компьютер немедленно, не ожидая стандартные 60 секунд, нужно указать значение 0 для параметра /t. Например, для немедленной перезагрузки компьютера:

Очень важный ключ /f. Я использую его практически всегда при выключении или перезагрузки серверов Windows. Данный атрибут обеспечивает принудительное завершение всех запущенных программ и процессов, не ожидая подтверждения от пользователя (не будем же мы ждать подтверждения закрытия программ от всех пользователей на терминальном сервере, его можно просто не дождаться).

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

Ярлык для перезагрузки компьютера

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

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

Можно распространить такой ярлык на компьютеры пользователей через GPO.

Перезагрузка Windows в определенное время

Чтобы всегда перезагружать/выключать компьютер или сервер в определенное время, вы можете добавить команду shutdown в планировщик заданий Windows taskschd.msc.

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

задание планировщика для ежедневной перезагрузки компьютера командой shutdown

$Trigger= New-ScheduledTaskTrigger -At 00:00am -Daily
$User= «NT AUTHORITY\SYSTEM»

$Action= New-ScheduledTaskAction -Execute «shutdown.exe» -Argument «–f –r –t 120»
Register-ScheduledTask -TaskName «RebootEvertyNight_PS» -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force

Задание планировщика также можно распространить на компьютеры с помощью групповых политик.

Перезагрузка удаленных компьютеров командой shutdown

Вы можете перезагрузить удаленный компьютер по сети, для этого у вас должен быть к нему сетевой доступ, а учетная запись, из-под которой запускается команда shutdown должна входить в группу локальных администраторов на удаленном компьютере (сервере):

shutdown /r /t 120 /m \\192.168.1.100

shutdown /r //m - перезагрузка удаленного компьютера

Если все указанные условия выполняются, но при выполнении команды shutdown появляется ошибка ”Отказано в доступе (5)”, на удаленном компьютере нужно разрешить удаленный доступ к административным ресурсам (C$, ADMIN$), изменив значение параметра LocalAccountTokenFilterPolicy на 1.

reg add «HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System» /v «LocalAccountTokenFilterPolicy» /t REG_DWORD /d 1 /f

На удаленном компьютере должны быть включены правила Windows Defender Firewall, разрешающие удаленный доступ черезWMI и SMB.

Get-NetFirewallrule -name WMI-RPCSS-In-TCP,WMI-WINMGMT-In-TCP,FPS-SMB-In-TCP| Enable-NetFirewallRule

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

net use \\192.168.31.10 /u:corp\username
shutdown /s /t 60 /f /m \\192.168.31.10

Если вам необходимо удаленно перезагрузить множество компьютеров, их список можно сохранить в текстовый файл и запустить удаленную перезагрузку всех компьютеров с помощью такого PowerShell скрипта:

$sh_msg = «Ваш компьютер будет автоматически перезагружен через 10 минут. Сохраните свои файлы и закройте запущенные программы»
$sh_delay = 600 # секунд
$computers = gc C:\PS\PC-list.txt
foreach ($comp in $computers)
& ‘C:\Windows\System32\SHUTDOWN.exe’ «-m \\$comp -r -c $sh_msg -t $sh_delay»
>

Графический интерфейс команды shutdown

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

shutdown /i - графический интерфейс команды shutdown

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

Перезагрузка и выключение Windows с помощью PowerShell

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

powershell команда Restart-Computer

Для перезагрузки Windows выполните:

Чтобы выключить компьютер:

По умолчанию перезагрузка начнется через 5 секунд. Можно увеличить задержку перед перезагрузкой:

Restart-Computer –delay 15

У обоих командлетов есть параметр –ComputerName , который позволяет задать список удаленных компьютеров.

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

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

Можно указать учетные данные администратора для подключения к удаленному хосту:

$Creds = Get-Credential
Restart-Computer -ComputerName $Names -Credential $Creds

Для подключения к удаленным компьютерам используется WMI и DCOM (он должны быть включен и настроен). Если WMI не настроен, при запуске команды появится ошибка:

Restart-Computer : Failed to restart the computer wks-t1122h2 with the following error message: Access is denied. Exception from HRESULT: 0x80070005 (E_ACCESSDENIED).

restart-computer ошибка при удаленной перезагрузке компьютера по сети 0x80070005

Если на удаленном компьютере настроен WinRM (Windows Remote Management), вы можете использовать для подключения WSman вместо WMI:

Restart-Computer -ComputerName wks-t1122h2 -Protocol WSMan

Если на удаленном компьютер есть активные сессии пользователей, при запуске Restart-Computer появится ошибка:

Restart-Computer : Failed to restart the computer wks-t1122h2 with the following error message: The system shutdown cannot be initiated because there are other users logged on to the computer.

Restart-Computer на удаленном компьютере есть активный пользователь

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

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

Restart-Computer -ComputerName wks-t1122h2 –Force

В журнале событий Windows с EventID 1074 (Event Viewer -> Windows Logs -> System) будет содержаться имя пользователя, который выключил/перезагрузил Windows.

EventID 1074 кто перезагрузил windows

С помощью параметра -For можно перезагрузить компьютер и дождаться, когда он будет доступен. Например, вы хотите убедиться, что удаленный компьютер успешно перезагрузится и на нем стартовала служба WinRM, позволяющая подключиться к нему через WS-Management:

Restart-Computer -ComputerName wks-t1122h2 -Wait -For WinRM

Restarting computer wks-t1122h2 Verifying that the computer has been restarted.

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

Можно дождаться запуска службы удаленного рабочего стола (RDP) или любой другой службы Windows:

Restart-Computer -ComputerName wks-t1122h2 -Wait -For TermService

Если нужно одновременно перезагрузить несколько хостов, можно использовать возможности параллельного запуска команд в версии PowerShell 7.x.

Например, вы можете получим список Windows Server в определенном контейнере (Organizational Unit) Active Directory с помощью командлета Get-ADComputer и перезагрузить их одновременно:

$Computers = (Get-ADComputer -Filter ‘operatingsystem -like «*Windows server*» -and enabled -eq «true»‘ -SearchBase «OU=Servers,DC=winitpro,DC=loc»).Name
$Computers | ForEach-Object -Parallel < Restart-Computer -ComputerName $_ -Force>-ThrottleLimit 3

Предыдущая статьяПредыдущая статья Следующая статья Следующая статья

Restart-Computer перезагрузка компьютера из PowerShell

Настройка серверов windows и linux

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

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

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

Get-Help Restart-Computer

Get-Help Restart-Computer

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

Restart-Computer

Restart-Compute

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

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

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

Restart-Computer -ComputerName localhost

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

Перезагрузка локального компьютера

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

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

Restart-Computer -ComputerName w10-cl02, w10-cl03 (w10-cl02, w10-cl03 имена удаленных компьютеров или серверов)

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

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

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

Restart-Computer -ComputerName w10-cl02, w10-cl03 -Force

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

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

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

Restart-Computer -ComputerName w10-cl02, w10-cl03 -Credential root\sem (Где root, это наименование домена, а sem, это логин пользователя)

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

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

Restart-Computer -ComputerName w10-cl02, w10-cl03 -Credential root\sem -Force

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

Процесс C:\Windows\system32\wbem\wmiprvse.exe (W10-CL02) инициировал действие «Перезапустить» для компьютера W10-CL02 от имени пользователя ROOT\sem по причине: Причина на перечислена
Код причины: 0x80070015 Тип выключения: Перезапустить

инициировал действие

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

файл со списком компьютеров для удаленной перезагрузки

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

Get-Content -Path C:\computers.txt | Restart-Computer -Force

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

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

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

Start-Sleep -Seconds 60; Restart-Computer -ComputerName w10-cl03 -Force

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

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

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

-WsmanAuthentication

Аутентификация поставщика услуг безопасности учетных данных (CredSSP), при которой учетные данные пользователя передаются на удаленный компьютер для проверки подлинности, предназначена для команд, требующих проверки подлинности на нескольких ресурсах, например для доступа к удаленному сетевому ресурсу. Этот механизм увеличивает риск безопасности при удаленной операции. Если удаленный компьютер скомпрометирован, переданные ему учетные данные можно использовать для управления сетевым сеансом.

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

Restart-Computer -ComputerName w10-cl02, w10-cl03 -Force -WsmanAuthentication Kerberos

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

Более подробно про командлет Restart-Computer вы можете почитать по ссылке https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/restart-computer?view=powershell-6

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

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

$wshell = New-Object -ComObject Wscript.Shell

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

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

Restart-Computer -ComputerName w10-cl01

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

На этом у меня у меня все. Мы разобрали удаленную перезагрузка компьютера через PowerShell, разобрали работу со списками. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.

Популярные Похожие записи:
  • Как массово поменять пароль локального администратора в домене
  • Ошибка The number of connections to this computer is limitedОшибка The number of connections to this computer is limited
  • Как узнать, нуждается ли удаленный сервер в перезагрузке
  • Служба 1С отображается абракадабройСлужба 1С отображается абракадаброй
  • Как вручную изменить сервер администрирования Kaspersky в агенте
  • Ошибка RDS: Cannot get role and feature dataОшибка RDS: Cannot get role and feature data

Июл 2, 2022 09:35 Автор — Сёмин Иван

5 Responses to Restart-Computer перезагрузка компьютера из PowerShell

Привет Иван.Когда я делаю обычную перезагрузку, то мой ноутбук уходит в чёрный экран и не возвращается Приходится принудительно его отключать-вынимать штекер из розетки. После этого включаю и ноутбук работает как ни в чём не бывало. Посоветуйте как наладить перезагрузку? Благодарю.

Иван Семин :

Добрый день! Я бы проверил состояние системы через команду sfc /scannow & DISM /Online /Cleanup-Image /ScanHealth & DISM /Online /Cleanup-Image /CheckHealth & DISM /Online /Cleanup-Image /RestoreHealth

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *