PowerShell在组策略对象内重新计划任务的方法

aor9mmx1  于 2023-02-23  发布在  Shell
关注(0)|答案(1)|浏览(173)

我找不到任何允许我编辑GPO内计划任务的日期/时间的PowerShell cmdlet。我要求确认此类cmdlet不存在,或者(我希望)有人知道自动完成此任务的方法。非常感谢

igetnqfo

igetnqfo1#

最后,介绍了一种使用PowerShell修改GPO中的计划任务的方法。基本上,这是关于选择GPO在sysvol文件夹中保存计划任务的xml文件,在xml linq库的帮助下编辑该文件以选择正确的命名空间,然后将xml保存回其文件夹:

Add-Type -AssemblyName 'System'
Add-Type -AssemblyName 'System.Linq'
Add-Type -AssemblyName 'System.Xml.Linq'

#vars
$domain = 'domainName'
$ADcreds = PSCreds
$gpo = Get-GPO -Name 'GPO-Name' -Domain $domain
New-PSDrive -Name "S" -Root "\\$domain\SYSVOL\$domain\Policies\{$($gpo.Id)}\Machine\Preferences\ScheduledTasks" -PSProvider "FileSystem" -Credential $ADcreds
$inputFilename =  "$((Get-PSDrive 'S').Root)\ScheduledTasks.xml"
$outputFilename = "$((Get-PSDrive 'S').Root)\ScheduledTasksNew.xml"

$reader = [System.IO.StreamReader]::new($inputFilename)
# skip first line with utf-8
$reader.ReadLine()
$xDoc = [System.Xml.Linq.XDocument]::Load($reader)
$today = [DateTime]::Now
$tasksV2 = $xDoc.Descendants().Where({$_.Name.LocalName -eq "TaskV2"})
foreach($taskV2 in $tasksV2.Where({$_.Attribute('name').Value -ne 'wsus-extraMaintenance'}))
{
    $startBoundary = $taskV2 = $xDoc.Descendants().Where( {$_.Name.LocalName -eq "StartBoundary"})
    $todayStr = $today.ToString("yyyy-MM-ddTHH:mm:ss")
    $startBoundary.SetValue($todayStr)
}
$xDoc.Save($outputFilename)

Get-ChildItem -Path 'S:\ScheduledTasks.xml' | Remove-Item -Confirm:$false
Get-ChildItem -Path 'S:\ScheduledTasksNew.xml' | Rename-Item -NewName 'ScheduledTasks.xml' -Confirm:$false

相关问题