如何使用 PowerShell 通过 GPO 自动注册计划任务?

如何使用 PowerShell 通过 GPO 自动注册计划任务?

我可以在 AD 中的 10 个节点上手动运行以下 cmdlet 来注册计划任务:

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

我正在寻找在 AD 级别上实现自动化的方法(最好不要利用 WinRM..)

根据本文可用的 GroupPolicy cmdlet 列表,似乎配置 GPO(使用 PowerShell cmdlet)的唯一方法是使用Set-GPRegistryValueSet-GPPrefRegistryValuecmdlet。

似乎以下注册表项可用于计划任务:

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

鉴于这些细节,有没有办法使用、和computer configuration -> Preferences -> Control Panel Settings -> Scheduled Tasks -> New -> Scheduled Tasks自动执行 GPME 的操作?$inlinePowershellScript$myTaskTrigger$myTaskPrincipal

在此处输入图片描述

答案1

你把这件事想得太复杂了。

计划任务只是 xml 文件。手动创建任务,将其导出并使用计划任务 cmdlet 将其导入到其他服务器。

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'
}

只需使用循环中的服务器列表进行注册

相关内容