首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从powershell获取任务计划程序中与任务关联的触发器详细信息

如何从powershell获取任务计划程序中与任务关联的触发器详细信息
EN

Stack Overflow用户
提问于 2015-09-23 13:06:01
回答 3查看 14.4K关注 0票数 3

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

因此,基本上我需要这些信息,我将在此触发窗口中设置这些信息,例如每天或每周和重复任务持续时间以及持续时间等。

现在我可以获得以下信息。

代码语言:javascript
复制
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)到备份服务器上,这是完全正常的。

但是,当我更改触发器详细信息或操作选项卡中的参数时,它不会出现在备份服务器中,因为我只是检查任务名称是否已经存在于备份服务器中,如果不是正在创建这些任务。

因此,有没有办法检查触发器(每日或每周等,重复详细信息)或操作(脚本和参数详细信息)的详细信息,以便我可以在辅助服务器中相应地更新任务。

EN

回答 3

Stack Overflow用户

发布于 2015-09-23 14:52:26

这就是你想要的东西:

代码语言:javascript
复制
$task = Get-ScheduledTask -TaskName "Adobe Flash Player Updater"
$taskTrigger = $task.Triggers[0]

$taskTrigger

它应该会给出类似以下内容的输出:

代码语言:javascript
复制
Enabled            : True
EndBoundary        : 
ExecutionTimeLimit : 
Id                 : 
Repetition         : MSFT_TaskRepetitionPattern
StartBoundary      : 2000-01-01T09:58:00+09:30
DaysInterval       : 1
RandomDelay        : 
PSComputerName     : 

编辑:另一种方式,使用ComObject连接

你可以这样做:

代码语言:javascript
复制
$taskService = New-Object -ComObject "Schedule.Service"
$taskService.Connect($env:COMPUTERNAME)

$rootTaskFolder = $taskService.GetFolder("\")
$task = $rootTaskFolder.GetTask("Adobe Flash Player Updater")
$task

这将返回任务的定义。然后,您可以使用Compare-Object查看备份服务器上的任务是否相同,如果不相同,则导出/导入任务。

如果你想解析XML,你可以这样做:

代码语言:javascript
复制
$parsedXML = [xml]$task.xml

然后,您可以通过执行以下操作来比较触发器:

代码语言:javascript
复制
Compare-Object -DifferenceObject $remoteServerParsedXML.GetElementsByTagName("Triggers") -ReferenceObject $parsedXML.GetElementsByTagName("Triggers")

这离你想要实现的目标更近了吗?

票数 2
EN

Stack Overflow用户

发布于 2015-09-23 14:37:19

我认为您需要的是“基本上”;)任务的导出/导入功能。

下面是一个示例代码:

代码语言:javascript
复制
#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)
}
票数 0
EN

Stack Overflow用户

发布于 2020-01-09 01:55:31

你可能会觉得这很难看,但它能让你在屏幕上看到所有相关的信息。或者你可以将它保存为一个对象,你可以从那里操作或格式化它。

代码语言:javascript
复制
$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
}

它会让你得到像这样的东西:

代码语言:javascript
复制
Repetition : PT1H
Duration   : P1D
Name       : MyCoolTask
Action     : C:\MyPath\MyCoolTask\MyCoolTask.exe
Start      : 1/10/2014 3:00:00 AM

重复是每小时(因此在PT1H中是1H ),持续时间是最大运行时间(1天),名称显然是任务的名称,动作和开始时间也应该不言而喻。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32731366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档