因此,基本上我需要获取与在任务调度器中创建的任务相关的触发器详细信息。

因此,基本上我需要这些信息,我将在此触发窗口中设置这些信息,例如每天或每周和重复任务持续时间以及持续时间等。
现在我可以获得以下信息。
Name : LastTaskResult
Value : 0
CimType : UInt32
Flags : Property, ReadOnly, NotModified
IsValueModified : False
Name : NextRunTime
Value : 23-09-2015 11:26:56
CimType : DateTime
Flags : Property, ReadOnly, NotModified
IsValueModified : False
Name : NumberOfMissedRuns
Value : 0
CimType : UInt32
Flags : Property, ReadOnly, NotModified
IsValueModified : False
Name : TaskName
Value : test_Task
CimType : String
Flags : Property, Key, NotModified
IsValueModified : False
Name : TaskPath
Value :
CimType : String
Flags : Property, Key, NotModified, NullValue
IsValueModified : False所以,基本上我的要求是我有两台服务器。一个是主服务器,另一个是备份服务器。我已经在主服务器上安排了任务,并定期将这些任务镜像(Robocopy)到备份服务器上,这是完全正常的。
但是,当我更改触发器详细信息或操作选项卡中的参数时,它不会出现在备份服务器中,因为我只是检查任务名称是否已经存在于备份服务器中,如果不是正在创建这些任务。
因此,有没有办法检查触发器(每日或每周等,重复详细信息)或操作(脚本和参数详细信息)的详细信息,以便我可以在辅助服务器中相应地更新任务。
发布于 2015-09-23 14:52:26
这就是你想要的东西:
$task = Get-ScheduledTask -TaskName "Adobe Flash Player Updater"
$taskTrigger = $task.Triggers[0]
$taskTrigger它应该会给出类似以下内容的输出:
Enabled : True
EndBoundary :
ExecutionTimeLimit :
Id :
Repetition : MSFT_TaskRepetitionPattern
StartBoundary : 2000-01-01T09:58:00+09:30
DaysInterval : 1
RandomDelay :
PSComputerName : 编辑:另一种方式,使用ComObject连接
你可以这样做:
$taskService = New-Object -ComObject "Schedule.Service"
$taskService.Connect($env:COMPUTERNAME)
$rootTaskFolder = $taskService.GetFolder("\")
$task = $rootTaskFolder.GetTask("Adobe Flash Player Updater")
$task这将返回任务的定义。然后,您可以使用Compare-Object查看备份服务器上的任务是否相同,如果不相同,则导出/导入任务。
如果你想解析XML,你可以这样做:
$parsedXML = [xml]$task.xml然后,您可以通过执行以下操作来比较触发器:
Compare-Object -DifferenceObject $remoteServerParsedXML.GetElementsByTagName("Triggers") -ReferenceObject $parsedXML.GetElementsByTagName("Triggers")这离你想要实现的目标更近了吗?
发布于 2015-09-23 14:37:19
我认为您需要的是“基本上”;)任务的导出/导入功能。
下面是一个示例代码:
#connect to scheduler of you master server
$sch = New-Object -ComObject("Schedule.Service")
$sch.connect("$computername")
$root=$sch.GetFolder("\")
$folder =$sch.GetFolder("\subfolder") #if you tasks are defined in a subfolder
#Export all tasks in the subfoder to $path folder in xml format
$folder.getTasks(0) | % {
$path="c:\temp\tasks\$($_.name).xml"
New-Item -ItemType file -Path $path
Set-Content -Path $path -Value $_.xml
}
#connect to scheduler of you backup server
$sch.connect("$backupcomputername")
$folder =$sch.GetFolder("\subfolder")
#import .xml from $task_path
$cred=get-credential # will ask for the credential of the user who run the tasks
Get-childItem -path $task_path -Filter *.xml | %{
$task_name = $_.Name.Replace('.xml', '')
$task_xml = Get-Content $_.FullName
$task = $sch.NewTask($null)
$task.XmlText = $task_xml
$folder.RegisterTaskDefinition($task_name, $task, 6, $cred.UserName, $cred.GetNetworkCredential().password, 1, $null)
}发布于 2020-01-09 01:55:31
你可能会觉得这很难看,但它能让你在屏幕上看到所有相关的信息。或者你可以将它保存为一个对象,你可以从那里操作或格式化它。
$ScheduledTasks = get-scheduledtask | ? {$_.TaskPath -like '*Cool*'}
foreach ($item in $ScheduledTasks) {
[string]$Name = ($item.TaskName)
[string]$Action = ($item.Actions | select -ExpandProperty Execute)
[datetime]$Start = ($item.Triggers | select -ExpandProperty StartBoundary)
[string]$Repetition = ($item.Triggers.Repetition | select -ExpandProperty interval)
[string]$Duration = ($item.triggers.Repetition | select -ExpandProperty duration)
$splat = @{
'Name' = $Name
'Action' = $Action
'Start' = $start
'Repetition' = $Repetition
'Duration' = $Duration
}
$obj = New-Object -TypeName PSObject -property $splat
$obj | Write-Output
}它会让你得到像这样的东西:
Repetition : PT1H
Duration : P1D
Name : MyCoolTask
Action : C:\MyPath\MyCoolTask\MyCoolTask.exe
Start : 1/10/2014 3:00:00 AM重复是每小时(因此在PT1H中是1H ),持续时间是最大运行时间(1天),名称显然是任务的名称,动作和开始时间也应该不言而喻。
https://stackoverflow.com/questions/32731366
复制相似问题