как выключить, перезапустить или выйти из windows через файл bat?

<p>я использовал <a href="https://en.wikipedia.org/wiki/remote\_desktop\_services#remote\_desktop\_connection">remote desktop connection</a> , чтобы попасть на рабочую станцию. но в этой среде я не могу использовать параметры питания в меню "пуск". мне нужен альтернативный способ выключения или перезагрузки.</p><p>как я могу контролировать состояние питания моего компьютера через командную строку?</p>

<p>наиболее распространенные способы использования команды <a href="https://ss64.com/nt/shutdown.html"><code>shutdown</code></a> :</p><ul> <li><code>shutdown -s</code> - выключается.</li> <li><code>shutdown -r</code> - перезагрузка.</li> <li><code>shutdown -l</code> - выход из системы.</li> <li> <p><code>shutdown -h</code> - зимует.</p> <p><strong> примечание: </strong> существует распространенная ловушка, в которой пользователи считают, что <code>-h</code> означает "помощь" (что он делает для любой другой программы командной строки ... кроме <code>shutdown.exe</code>, где это означает "спящий режим"). затем они запускают <code>shutdown -h</code> и случайно выключают свои компьютеры. остерегайтесь этого.</p> </li> <li> <p><code>shutdown -i</code> - "интерактивный режим". вместо выполнения действия он отображает диалоговое окно с графическим интерфейсом.</p> </li> <li><code>shutdown -a</code> - отмена предыдущей команды выключения.</li> </ul><p>команды выше могут быть объединены с этими дополнительными параметрами:</p><ul> <li><code>-f</code> - принудительно завершает работу программ. предотвращает застревание процесса выключения.</li> <li><code>-t <seconds></code> - устанавливает время до выключения. используйте <code>-t 0</code> для немедленного выключения.</li> <li><code>-c <message></code> - добавляет сообщение о завершении работы. сообщение попадет в журнал событий.</li> <li> <p><code>-y</code> - принудительно отвечает "да" на все запросы на завершение работы.</p> <p><strong> примечание: </strong> этот параметр не задокументирован ни в одной официальной документации. он был обнаружен <a href="https://stackoverflow.com/questions/46071009/what-exactly-does-shutdown-y-do">этими пользователями stackoverflow</a> .</p> </li> </ul><hr><p>я хочу убедиться, что некоторые другие действительно хорошие ответы также упоминаются вместе с этим. здесь они в произвольном порядке.</p><ul> <li> <a href="https://stackoverflow.com/questions/162304/how-do-i-shutdown-restart-logoff-via-bat-file#162342">опция <code>-f</code></a> из <a href="https://stackoverflow.com/users/672/kogus">josephstyons</a> </li> <li> <a href="https://stackoverflow.com/questions/162304/how-do-i-shutdown-restart-logoff-via-bat-file#162398">используя <code>rundll32</code></a> from <a href="https://stackoverflow.com/users/6309/vonc">vonc</a> </li> <li> <a href="https://stackoverflow.com/questions/162304/how-do-i-shutdown-restart-logoff-via-bat-file#162428">бегущая строка</a> из <a href="https://stackoverflow.com/users/14966/dean">дин</a> </li> <li> <a href="https://stackoverflow.com/questions/162304/how-do-i-shutdown-restart-logoff-windows-via-bat-file#416830">дистанционное отключение</a> с <a href="https://stackoverflow.com/users/18511/kip">кип</a> </li> </ul>

<p>если вы находитесь на удаленном компьютере, вы можете также добавить опцию -f для <strong> принудительной </strong> перезагрузки. в противном случае ваша сессия может закрыться, и упрямое приложение может повесить систему.</p><p>я использую это всякий раз, когда хочу вызвать немедленную перезагрузку:</p><pre><code>shutdown -t 0 -r -f </code></pre><p>для более дружественного варианта "дайте им время" вы можете использовать это:</p><pre><code>shutdown -t 30 -r </code></pre><p>как вы можете видеть в комментариях, тайм-аут подразумевает -f.</p><p> <a href="http://www.proffs.nu/brutus.htm">brutus 2006 - это утилита, которая предоставляет графический интерфейс для этих опций.</a> </p>

<p>никто не упомянул опцию <code>-m</code> для удаленного выключения:</p><pre><code>shutdown -r -f -m \\machinename </code></pre><p>также:</p><ul> <li>параметр <code>-r</code> вызывает перезагрузку (обычно это то, что вам нужно на удаленной машине, поскольку физический запуск может быть затруднен).</li> <li>параметр параметра <code>-f</code> вызывает перезагрузку.</li> <li>конечно, у вас должны быть соответствующие права для выключения удаленного компьютера.</li> </ul>

<p>оригинальный ответ: октябрь 2008</p><p>вы также получили все <del>"<strong><code>rundll32.exe shell32.dll</code></strong>"</del> серия:</p><p>(см. обновление ниже)</p><ul> <li><code>rundll32.exe user.exe,**exitwindows**</code> [быстрое выключение windows]</li> <li> <p><code>rundll32.exe user.exe,**exitwindowsexec**</code> [перезагрузить windows]</p> <pre><code>rundll32.exe shell32.dll,shexitwindowsex n </code></pre></li> </ul><p>где <code>n</code> означает:</p><ul> <li>0 - <code>logoff</code></li> <li>1 - <code>shutdown</code></li> <li>2 - <code>reboot</code></li> <li>4 - <code>force</code></li> <li>8 - <code>poweroff</code></li> </ul><p>(можно комбинировать -> 6 = 2 + 4 <code>force reboot</code>)</p><hr><h2>обновление апрель 2015 (6+ лет спустя):</h2><p> <a href="https://stackoverflow.com/users/3146/1800-information">1800 информация</a> любезно указывает <a href="https://stackoverflow.com/questions/162304/how-do-i-shutdown-restart-logoff-windows-via-bat-file/162398#comment47942248\_162398">в комментариях</a> :</p><blockquote> <p>не используйте <code>rundll32.exe</code> для этой цели. ожидается, что функция, которую вы передали в командной строке, имеет очень специфическую сигнатуру метода - она не соответствует сигнатуре метода <code>exitwindows</code>.</p> </blockquote><p> <a href="http://blogs.msdn.com/b/oldnewthing/">raymond chen</a> писал (а):</p><ul> <li>в 2004 " <a href="http://blogs.msdn.com/b/oldnewthing/archive/2004/01/15/58973.aspx">что может пойти не так, если вы не соответствуете правилам вызова?</a> "</li> </ul><blockquote> <p>подпись функции, требуемая для функций, вызываемых <code>rundll32.exe</code>:</p> </blockquote><pre><code>void callback exitwindowsex(hwnd hwnd, hinstance hinst, lpstr pszcmdline, int ncmdshow); </code></pre><blockquote> <p>это не помешало людям использовать <code>rundll32</code> для вызова случайных функций, которые не были предназначены для вызова <code>rundll32</code>, например <code>user32 lockworkstation</code> или <code>user32 exitwindowsex</code>.</p> </blockquote><p>(ой)</p><blockquote> <p>фактическая сигнатура функции для exitwindowsex:</p> </blockquote><pre><code>bool winapi exitwindowsex(uint uflags, dword dwreserved); </code></pre><ul> <li>в 2011 году: " <a href="http://blogs.msdn.com/b/oldnewthing/archive/2011/09/09/10208136.aspx">выбрасывать мусор на тротуаре: печальная история программы rundll32</a> "</li> </ul><p>и чтобы сделать это кристально чистым:</p><ul> <li>в 2013 году " <a href="http://blogs.msdn.com/b/oldnewthing/archive/2013/01/04/10382242.aspx">каковы рекомендации по использованию rundll32? легко: не используйте его</a> ":</li> </ul><blockquote> <p><code>rundll32</code> является остатком windows 95, и он устарел, по крайней мере, с windows vista, потому что он нарушает многие современные технические рекомендации.</p> </blockquote>

<p>еще один небольшой совет: при маршруте пакетного файла мне нравится иметь возможность прервать его в случае, если я запустил его случайно. таким образом, пакетный файл вызывает завершение работы, но оставляет вас в командной строке впоследствии.</p><pre><code>@echo off echo shutting down in 10 seconds. please type "shutdown /a" to abort. cmd.exe /k shutdown /f /t 10 /r </code></pre><p>кроме того, так как это по таймеру, вы получаете примерно тот же трепет, что и когда <a href="http://en.wikipedia.org/wiki/the\_oregon\_trail\_%28video\_game%29#hunting">охота на орегонской тропе</a> .</p>

<p>при удаленном подключении к компьютеру (в любом случае целью является windows xp; я не уверен насчет целевой windows vista), хотя <em>завершение работы</em> в меню "пуск" заменяется на <em>отключить сеанс</em> или что-то вроде что должен быть один, называемый "windows security", который также делает то же самое, что и <kbd>ctrl</kbd> + <kbd>alt</kbd> + <kbd>end</kbd> как указано оуэном.</p>

<p>вы, вероятно, знаете об этом, но на всякий случай: гораздо проще просто ввести <code>shutdown -r</code> (или любую другую команду, которая вам нравится) в поле "выполнить" и нажать ввод.</p><p>сохраняет оставленные командные файлы повсюду.</p>

<p>я опоздал на вечеринку, но пока не видел этот ответ. если вы не хотите использовать командный файл или введите команду. вы можете просто установить фокус на рабочий стол, а затем использовать <kbd>alt</kbd> + <kbd>f4</kbd>,.</p><p>windows спросит вас, что вы хотите сделать, выберите выключение или перезагрузку.</p><p>снимки экрана и даже видео см .: <a href="https://tinkertry.com/how-to-shutdown-or-restart-windows-over-rdp">https://tinkertry.com/how-to-shutdown-or-restart-windows-over-rdp</a> </p>

<p>я написал бы это в <a href="http://en.wikipedia.org/wiki/notepad\_%28software%29">блокнот</a> или <a href="http://en.wikipedia.org/wiki/wordpad">wordpad</a> для основной команды выхода из системы:</p><pre><code>@echo off shutdown -l </code></pre><p>по сути, это то же самое, что нажимать кнопку запуска и выхода вручную, но это немного быстрее, если у вас есть готовый пакетный файл.</p>