Мне нужно найти способ отключить запланированное задание на удаленном компьютере и ожидание, пока эта задача перестанет выполняться, если она выполняется в данный момент. Если возможно, я бы хотел сделать это через WMIC. Это будет интегрировано в более крупный пакетный процесс.
Насколько я понял:
> wmic /node:%SERVER_NAME% /namespace:\\root\cimv2 path Win32_ScheduledJob
Но это просто возвращается:
No Instance(s) Available.
Поэтому я не уверен, что делаю что-то не так, или, может быть, мне нужно что-то настроить на сервере.
Почему не PowerShell? WMIC довольно крутой, но я не могу не чувствовать, что PowerShell теперь является предпочтительным решением для такого рода вещей:
Invoke-Command -ComputerName $Server -ScriptBlock { Disable-ScheduledJob -Name $Task }
Кажется, что WMIC
поддерживает только рабочие места, созданные с WMIC
сам или созданный с помощью AT
команда (источник - стартовая страница 205).
Это, безусловно, причина, по которой вы получаете No Instance(s) Available.
Я тоже фанат Powershell, но если это проблема, вы можете использовать schtasks
утилита (как вы упомянули).
Чтобы удаленно отключить задачу:
schtasks /change /disable /TN "task name" /S server_fqdn /U domain\user /P password
Преимущество отключения задачи заключается в том, что вы уверены, что она будет продолжать работать до тех пор, пока не завершится, в случае, если она была запущена (в этом случае отключаются только будущие исполнения).
Если вы хотите дождаться завершения задачи, вам придется дождаться завершения процесса. Чтобы избежать использования стороннего инструмента / команды, вы можете сделать это с помощью schtasks
также, запросив статус задачи:
schtasks /query /TN "task name" /S server_fqdn /U domain\user /P password | finstr Running
(PS: обратите внимание, что я не уверен в статусе "работает", потому что моя ОС Windows французская. Проверьте это на вашем языке).
schtasks /END
немедленно убьет задачу.