Для того, чтобы выключить, перезагрузить компьютер или завершить сеанс пользователя, в PowerShell можно воспользоваться методами WMI-класса Win32_OperatingSystem.
Для начала выведем список методов класса:
Get-WmiObject Win32_OperatingSystem | Get-Member -MemberType Method
Если вам надо просто перезагрузить или выключить компьютер, то подойдут методы Reboot и Shutdown соответственно. К примеру, для перезагрузки надо выполнить такую команду:
(Get-WmiObject Win32_OperatingSystem -EnableAllPrivileges).Shutdown()
Обратите внимание на ключ EnableAllPrivileges. Повышение привилегий необходимо для данной операции, без него команда завершится с ошибкой.
Следующий метод Win32Shutdown в качестве аргумента принимает параметр (Flags), с помощью которого можно выбрать необходимое действие. Параметр представляет из себя битовую маску и может принимать следующие значения:
Log Off (0) — выход из системы. Останавливает все процессы, связанные с контекстом безопасности текущего пользователя, завершает его сеанс и отображает диалоговое окно входа в систему.
Forced Log Off (4) — принудительный выход из системы. Выход производится незамедлительно, не дожидаясь завершения процессов пользователя. Это может привести к некорректному завершению работы программ и потере данных.
Shutdown (1) — завершение работы. Завершает работу системы и выключает питание компьютера. При этом все запущенные процессы останавливаются, а содержимое памяти сохраняется на диск. Во время завершения работы система обращается к каждому запущенному приложению и ждет от него подтверждения того, что его можно безопасно завершить.
Forced Shutdown (5) — принудительное завершение работы. Завершает работу системы и выключает питание компьютера. При принудительном завершении работы все запущенные программы и службы, включая WMI, отключаются незамедлительно. Из-за этого может произойти потеря данных, а при запуске на удаленном компьютере вы не сможете увидеть результат выполнения команды.
Reboot (2) — перезагрузка. Завершение работы и перезагрузка компьютера.
Forced Reboot (6) — принудительная перезагрузка. При использовании метода принудительной перезагрузки все запущенные программы и службы незамедлительно завершаются, из за чего может произойти потеря данных.
Power Off (8) — выключение. Завершение работы системы и выключение питания компьютера (если это поддерживается).
Forced Power Off (12) — принудительное выключение. Завершение работы системы и выключение питания компьютера. При принудительном выключении все запущенные программы и службы незамедлительно завершаются, из за чего может произойти потеря данных.
К примеру команда для завершения сеанса пользователя (logoff) будет выглядеть так:
(Get-WmiObject Win32_OperatingSystem -EnableAllPrivileges).Win32Shutdown(0)
Ну и самый продвинутый метод Win32ShutdownTracker, который имеет четыре параметра — задержку (Timeout), комментарий (Comment), код причины (ReasonCode) и действие (Flags). Действия указываются аналогично предыдущему методу. Коды причины можно посмотреть здесь, хотя если особой необходимости в них нет, можно просто поставить 0. Для примера принудительно завершим работу системы, укажем таймаут 60 секунд и добавим комментарий:
(Get-WmiObject Win32_OperatingSystem -EnableAllPrivileges).Win32ShutdownTracker(60,"Force shutdown",0,5)
Примечание. Для операций LogOff, независимо от указанной задержки выход из системы происходит незамедлительно. Добавить комментарий также невозможно.
Ну ради общего развития интересно. Также как делать из буханки троллейбус — можно, но зачем? ведь если уже есть ps, то можно restart(stop)-Computer, или еще проще shutdown -l (r, и т д)? Для терминальников есть свой командлет invoke-rduserlogoff