Как автоматизировать регистрацию запланированной задачи через GPO с помощью PowerShell?

612
vulcan raven

Я могу вручную запустить следующий командлет на 10 узлах в AD, чтобы зарегистрировать запланированное задание:

Register-ScheduledTask ` -TaskName "MyTask" ` -Action $inlinePowershellScript ` -Trigger $myTaskTrigger ` -Principal $myTaskPrincipal 

Я искал способы автоматизировать его на уровне AD (желательно без использования WinRM ..)

Согласно этой статье и списку доступных командлетов GroupPolicy, кажется, что единственный способ настроить GPO (с помощью командлетов PowerShell) - это использовать Set-GPRegistryValueи Set-GPPrefRegistryValueкомандлеты.

Это кажется, что следующие ключи реестра доступны для Запланированных задач:

HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\Taskcache\Tasks HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\Taskcache\Tree 

Учитывая эти детали, есть способ, чтобы выполнить GPME в computer configuration -> Preferences -> Control Panel Settings -> Scheduled Tasks -> New -> Scheduled Tasksавтоматически действие с помощью $inlinePowershellScript, $myTaskTriggerа $myTaskPrincipal?

enter image description here

0

1 ответ на вопрос

0
postanote

Вы слишком усложнили это.

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

Get-Command -Name '*scheduled*' | ft -a   CommandType Name Version Source  ----------- ---- ------- ------  Function Disable-ScheduledTask 1.0.0.0 ScheduledTasks  Function Enable-ScheduledTask 1.0.0.0 ScheduledTasks  Function Export-ScheduledTask 1.0.0.0 ScheduledTasks  Function Get-ClusteredScheduledTask 1.0.0.0 ScheduledTasks  Function Get-ScheduledTask 1.0.0.0 ScheduledTasks  Function Get-ScheduledTaskInfo 1.0.0.0 ScheduledTasks  ... 

Пример:

# Create your task  $A = New-ScheduledTaskAction –Execute 'powershell' -Argument 'Hello, from task scheduler' $T = New-ScheduledTaskTrigger -Weekly -WeeksInterval 1 -DaysOfWeek Monday,Tuesday,Wednesday,Thursday,Friday -At 8am $S = New-ScheduledTaskSettingsSet $D = New-ScheduledTask -Action $A -Trigger $T -Settings $S $Task = Register-ScheduledTask 'TestTask' -InputObject $D  # View the created task XML Get-Content -Path 'C:\Windows\System32\Tasks\TestTask' | Out-GridView Get-ChildItem -Path 'C:\Windows\System32\Tasks'  Export-ScheduledTask 'TestTask' |  out-file '\\TargetServer\c$\public\TestTask.xml'  Invoke-Command -ComputerName 'TargetServer' -ScriptBlock { Register-ScheduledTask -Xml (Get-Content 'C:\Users\public\TestTask.xml' | out-string) -TaskName 'TestTask' } 

Просто используйте список серверов в цикле регистрации