Powershell - 手动触发预定作业
Powershell - Manually trigger a scheduled job
我创建了一个 powershell 作业,当我使用以下命令时可以看到它:
PS C:\WINDOWS\system32> Get-ScheduledJob -Name KillTicker | Get-JobTrigger
Id Frequency Time DaysOfWeek Enabled
-- --------- ---- ---------- -------
1 AtStartup True
因为这是一项启动工作,我真的不想重新启动来测试它 - 如何手动启动这项工作?
如果您 运行 Get-ScheduledJob -id 1 | Get-Member
检索 Microsoft.PowerShell.ScheduledJob.ScheduledJobDefinition
的所有成员,您将看到该对象公开了一个名为 StartJob
:
的方法
(Get-ScheduledJob -id 1).StartJob()
要检索结果,请使用 Receive-Job cmdlet:
Receive-Job -id 1
您可以使用 Start-Job
cmdlet 并提供计划作业的名称作为
-DefinitionName
参数。
Start-Job -DefinitionName *MyJobName*
我认为值得一提的是 Start-Job 或 StartJob() 都是 运行 当前安全上下文中定义的作业。如果作业 运行 作为不同的用户或访问网络资源,您可能会得到意想不到的结果。
要获得相同的行为,请使用 (Get-ScheduledJob -Name xxx).RunAsTask()
或 Start-ScheduledTask -TaskName xxx -TaskPath xxx
。后者提供了一个 -CimSession
选项,可能更适合远程操作。
我创建了一个 powershell 作业,当我使用以下命令时可以看到它:
PS C:\WINDOWS\system32> Get-ScheduledJob -Name KillTicker | Get-JobTrigger
Id Frequency Time DaysOfWeek Enabled
-- --------- ---- ---------- -------
1 AtStartup True
因为这是一项启动工作,我真的不想重新启动来测试它 - 如何手动启动这项工作?
如果您 运行 Get-ScheduledJob -id 1 | Get-Member
检索 Microsoft.PowerShell.ScheduledJob.ScheduledJobDefinition
的所有成员,您将看到该对象公开了一个名为 StartJob
:
(Get-ScheduledJob -id 1).StartJob()
要检索结果,请使用 Receive-Job cmdlet:
Receive-Job -id 1
您可以使用 Start-Job
cmdlet 并提供计划作业的名称作为
-DefinitionName
参数。
Start-Job -DefinitionName *MyJobName*
我认为值得一提的是 Start-Job 或 StartJob() 都是 运行 当前安全上下文中定义的作业。如果作业 运行 作为不同的用户或访问网络资源,您可能会得到意想不到的结果。
要获得相同的行为,请使用 (Get-ScheduledJob -Name xxx).RunAsTask()
或 Start-ScheduledTask -TaskName xxx -TaskPath xxx
。后者提供了一个 -CimSession
选项,可能更适合远程操作。