Команда Get-ScheduledTask не работает в Windows Server 2008 R2 - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь найти запланированное задание с определенным шаблоном в названии, в моем случае назначенное задание должно иметь этот шаблон «ServiceNow» в своем имени. Для этого я использую команду Get-ScheduledTask, но эта команда не работает в Windows Server 2008 R2.

$taskPattern = "ServiceNow"
$taskDetails = Get-ScheduledTask | Where-Object {$_.TaskName -match $taskPattern  }
$taskName = $taskDetails.TaskName

Этот скрипт завершается ошибкой:

«Get-ScheduledTask: термин« Get-ScheduledTask »не распознается как имя командлета, функции, файла сценария или работающей программы. Проверьте правильность написания имени или, если был указан путь, убедитесь, что путь правильный и попробуйте снова. "

Затем я попробовал этот подход, который дает мне «(имя задачи, дата и время)», но я не знаю, как извлечь имя задачи из его вывода.

$taskPattern = "ServiceNow" 
$taskExists = schtasks /query | select-string -patt $taskPattern 
$taskExists

Может кто-нибудь сказать мне, как заставить его работать в Windows Server 2008 R2, только извлекая фактическое имя задачи? Заранее спасибо

1 Ответ

0 голосов
/ 03 июля 2018

Вы не можете получить Get-ScheduledTask в Windows 2008 R2, как это было представлено для Windows 2012, и никто не поддерживал его. Для получения дополнительной информации см. Ссылку на github .

Комментарий, который описывает ситуацию лучше всего:

Hi @dronkoff - этот модуль поддерживается в PS 4.0. Тем не менее проблема не в версии PowerShell. Проблема в том, что Модуль ScheduledTasks, от которого зависит этот ресурс, не построен в Windows Server 2008R2. Впервые он был включен в Windows Server 2012

Это относится ко многим модулям PowerShell: они отсутствуют из более старых версий Windows (сеть, например). В нечетном Повод есть легкая работа вокруг. Однако в этом случае преобразование использование ресурса schtasks.exe невозможно без полное переписывание и, вероятно, приведет к чему-то действительно нестабильный и глючный (не говоря уже о проблемах, которые могут возникнуть с разные локализованные версии счтасков). Я действительно не вижу этого происходит к сожалению (если кто-то из сообщества не имеет некоторые идеи о том, как это сделать).

Но вы правы, следует отметить, что Windows Server 2008R2 в настоящее время не поддерживается.

Обходной путь

Способ обойти это - использовать schtask с правильными переключателями.

Если он у вас в папке Microsoft, как у меня в примере, вам просто нужно запустить:

schtasks /tn \Microsoft\ServiceNow /query /fo LIST

Выход:

Folder: \Microsoft
HostName:      XXXXXACL06
TaskName:      \Microsoft\ServiceNow
Next Run Time: 7/4/2018 8:16:22 AM
Status:        Ready
Logon Mode:    Interactive only

Если вы хотите больше подробностей, вы можете использовать переключатель /v (подробный):

schtasks /tn \Microsoft\ServiceNow /query /v > service_now_details.txt

Редактировать - найти шаблон

Если у вас есть только шаблон для поиска, вы должны использовать какой-то дополнительный инструмент для поиска строки. Windows изначально поддерживает findstr (или Select-String (короткий sls) в powershell):

Чтобы найти имя задачи, вы можете использовать:

schtasks /query /fo LIST | findstr "ServiceNow"

ИЛИ даже с диким чартером

schtasks /query /fo LIST | findstr "ServiceNo*"

ИЛИ powershell способ:

schtasks /query /fo LIST | sls 'ServiceNo*'

Вывод во всех случаях будет примерно таким (поскольку моя задача названа точно ServiceNow):

TaskName: \Microsoft\ServiceNow

Edit2 чувствительность к регистру

Если вы ищете строку без учета регистра, то: для findstr необходимо добавить /I, чтобы сделать его нечувствительным. select-string (sls) у PowerShell нечувствителен к природе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...