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

Для будущих людей, рассматривающих эту проблему, я пытался написать атрибут проверки, который бы оценивал регулярное выражение, если свойство объекта было определенным значением. В моем случае, если адрес был адресом доставки, я не хотел, чтобы PO Boxes был включен, так что это то, что я придумал:

Использование

[Required]
public EAddressType addressType { get; set; } //Evaluate Validation attribute against this

[EvaluateRegexIfPropEqualsValue(Constants.NOT_PO_BOX_REGEX, "addressType", EAddressType.Shipping, ErrorMessage = "Unable to ship to PO Boxes or APO addresses")]
public String addressLine1 { get; set; }

И вот код для атрибута проверки:

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
public class EvaluateRegexIfPropEqualsValue : ValidationAttribute
{
    Regex _regex;
    string _prop;
    object _targetValue;

    public EvaluateRegexIfPropEqualsValue(string regex, string prop, object value)
    {
        this._regex = new Regex(regex);
        this._prop = prop;
        this._targetValue = value;
    }

    bool PropertyContainsValue(Object obj)
    {
        var propertyInfo = obj.GetType().GetProperty(this._prop);
        return (propertyInfo != null && this._targetValue.Equals(propertyInfo.GetValue(obj, null)));
    }

    protected override ValidationResult IsValid(object value, ValidationContext obj)
    {
        if (this.PropertyContainsValue(obj.ObjectInstance) && value != null && !this._regex.IsMatch(value.ToString()))
        {
            return new ValidationResult(this.ErrorMessage);
        }
        return ValidationResult.Success;
    }
}
646
задан MultiplyByZer0 30 October 2018 в 03:25
поделиться

7 ответов

Наиболее распространенные способы использовать shutdown команда:

  • shutdown -s — Закрывается.
  • shutdown -r — Перезапуски.
  • shutdown -l — Выходит из системы.
  • shutdown -h — В спящем режиме.

    Примечание: существует распространенная ошибка, где пользователи думают -h, означает "справку" (который это делает для любой программы командной строки... кроме shutdown.exe, где это означает ", в спящем режиме"). Они тогда работают shutdown -h и случайно выключают свои компьютеры. Не упустите это.

  • shutdown -i — "Интерактивный режим". Вместо того, чтобы выполнить действие, это отображает диалоговое окно графического интерфейса пользователя.

  • shutdown -a — Прерывает предыдущую команду завершения работы.

команды выше могут быть объединены с этими дополнительными опциями:

  • -f — Вынуждает программы выйти. Препятствует тому, чтобы процесс завершения работы застрял.
  • -t <seconds> — Устанавливает время до завершения работы. Используйте -t 0 для завершения работу сразу.
  • -c <message> вЂ,” Добавляет сообщение завершения работы. Сообщение закончится в конечном счете Журнал.
  • -y — Вызывает "да", отвечают на все запросы завершения работы.

    Примечание: Эта опция не документируется ни в какую официальную документацию. Это было обнаружено [1 118] эти пользователи StackOverflow .

<час>

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

1153
ответ дан MultiplyByZer0 30 October 2018 в 03:25
поделиться

Если Вы находитесь на удаленной машине, можно также хотеть добавить-f опцию к сила перезагрузка. Иначе Ваша сессия может закрыться, и упрямое приложение может подвесить систему.

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

shutdown -t 0 -r -f

Для более дружественного "дают им некоторое время" опция, можно использовать это:

shutdown -t 30 -r

, Как Вы видите в комментариях,-f подразумевается тайм-аутом.

Brutus 2006 является утилитой, которая обеспечивает GUI для этих опций.

374
ответ дан JosephStyons 30 October 2018 в 03:25
поделиться

Исходный ответ: октябрь 2008

Вы также добрались весь " rundll32.exe shell32.dll " serie:

(см. обновление ниже)

  • rundll32.exe user.exe,**ExitWindows** [Быстрое Завершение работы Windows]
  • rundll32.exe user.exe,**ExitWindowsExec** [Windows Перезапуска]

    rundll32.exe shell32.dll,SHExitWindowsEx n
    

, где n обозначает:

  • 0 - LOGOFF
  • 1 - SHUTDOWN
  • 2 - REBOOT
  • 4 - FORCE
  • 8 - POWEROFF

(может быть объединен-> 6 = 2+4 FORCE REBOOT)

<час>

апрель 2015 Обновления (6 + несколько лет спустя):

ИНФОРМАЦИЯ 1800 года доброжелательный указывает в комментариях :

не используют rundll32.exe с этой целью. Это ожидает, что функция, Вы передали командную строку, имеет очень определенную сигнатуру метода - это не соответствует сигнатуре метода [1 114].

Raymond CHEN записал:

функциональная подпись, требуемая для функций, вызванных [1 115]:

void CALLBACK ExitWindowsEx(HWND hwnd, HINSTANCE hinst,
       LPSTR pszCmdLine, int nCmdShow);

, Который не мешал людям использовать rundll32 для вызывания случайных функций, которые не были разработаны, чтобы быть названными [1 117], как [1 118] или user32 ExitWindowsEx.

(ой)

фактическая функциональная подпись для ExitWindowsEx:

BOOL WINAPI ExitWindowsEx(UINT uFlags, DWORD dwReserved);

И сделать его совершенно ясным:

Rundll32 остаток от Windows 95, и он был удержан от использования с тех пор, по крайней мере, Windows Vista, потому что он нарушает много современных технических инструкций.

37
ответ дан Community 30 October 2018 в 03:25
поделиться

Когда удаленный в машину (цель является Windows  XP так или иначе; я не уверен в целевом Windows  Vista), хотя Завершение работы на меню "Пуск" заменяется Сессия Разъединения или что-то как этот, должен быть тот, названный 'безопасностью Windows', которая также делает то же самое как Ctrl + Высокий звук + Конец , как указано Owen.

7
ответ дан Peter Mortensen 30 October 2018 в 03:25
поделиться

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

Сохранил разбрасывающие пакетные файлы, лежащие везде.

7
ответ дан Simon 30 October 2018 в 03:25
поделиться

Никто не упомянул -m опция для удаленного завершения работы:

shutdown -r -f -m \\machinename

Также:

  • -r параметр вызывает перезагрузку (который обычно является, что Вы хотите на удаленной машине, с тех пор физически стартовый, это могло бы быть трудно).
  • -f опция параметра вызывает перезагрузку.
  • у Вас должны быть соответствующие полномочия закрыть удаленную машину, конечно.
81
ответ дан Kip 30 October 2018 в 03:25
поделиться

Я бы написал это в Блокноте или WordPad для базовой команды выхода:

@echo off
shutdown -l

Это в основном то же самое, что нажать кнопку «Пуск» и «выйти из системы» вручную, но это будет немного быстрее, если у вас есть готовый командный файл.

5
ответ дан 22 November 2019 в 21:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: