Команда выключения/перезагрузки с использованием переменной в powershell

Я работаю над модулем перезагрузки GUI в моем инструменте. Я хочу использовать для этого командную строку командной строки «shutdown». Его цель - заменить «shutdown -i» на нескольких серверах, а затем я могу автоматически пропинговать их, чтобы проверить, была ли перезагрузка успешной.

В CMD командная строка выглядит так:

shutdown /r /t 30 /m \\server /c "reboot reason"

В моем сценарии я попрошу:

  • причина = $комментарий
  • time = $time (значение, а также в чекбоксе, требуется это или нет)
  • имя сервера = $сервер

Я проверю с несколькими вариантами «если» время, проверено ли оно или нет, и что причина перезагрузки не пуста, а затем добавлю их все в переменную:

$reboot = "/r /t " + $time + "/m \\" + $server + "/c " + $comment

а затем используйте переменную в команде в powershell:

& shutdown $reboot

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


person Zsolt    schedule 23.02.2015    source источник
comment
Я думаю, что то, что у вас есть, должно работать, но вы также можете использовать командлет Stop-Computer, который существует по той же причине. Хотя вы не можете получить комментарии с этим   -  person Matt    schedule 23.02.2015
comment
Спасибо за идею. Я просмотрел эту команду перезагрузки компьютера, и она выглядит довольно изменчиво, но не могу найти параметр комментария (для меня это обязательное поле). Вот синтаксис, который я нашел: Stop-Computer [[-ComputerName] string[]] [[-Credential] PSCredential] [-Authentication AuthenticationLevel] [-Impersonation ImpersonationLevel] [-AsJob] [-Force] [-ThrottleLimit int] [-Confirm] [-WhatIf] [CommonParameters]   -  person Zsolt    schedule 23.02.2015


Ответы (1)


Должно работать, да. Я бы также рекомендовал использовать массив для параметров, чтобы он оставался чистым.

$time = 120
$server = "mycomputer"
$comment = "this is my comment."
$reboot = @("/r", "/t", $time, "/m", "\\$server", "/c", $comment)

& shutdown $reboot

Или вы можете попробовать сделать это с помощью WMI (непроверено):

$time = 120
$comment = "this is my comment."
$server = "mycomputer"

Invoke-WmiMethod -ComputerName $server -Class Win32_OperatingSystem -Name Win32ShutdownTracker -ArgumentList @($time, $comment, 0, 2)
person Frode F.    schedule 23.02.2015