首页 > 解决方案 > 使用 PowerShell 创建 Windows 计划任务时停止现有实例选项

问题描述

我正在创建一个将创建计划任务的 PowerShell 脚本。使用 Windows GUI,在设置对话框中,我可以将其设置为“停止现有实例”,如果它已经在运行,它将关闭程序。通过 XML 导出此任务时,该字段标记为:

<Settings>
    <MultipleInstancesPolicy>StopExisting</MultipleInstancesPolicy>
</Settings> 

但是,在 PowerShell 中编写此代码时,我只有IgnoreNew,ParallelQueue. 有没有办法StopInstace通过 PowerShell 使用?

这是我的代码:

$Action = New-ScheduledTaskAction -Execute 'cmd.exe' -Argument "/c 'command'"

$Trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionDuration (New-TimeSpan -Days (365 * 20)) -RepetitionInterval  (New-TimeSpan -Minutes 33)

**$Setting = New-ScheduledTaskSettingsSet -MultipleInstances StopInstance**

Register-ScheduledTask -Action $Action -Trigger $Trigger -Setting $Setting -TaskName "Microsoft Windows > Monitoring Service" -Description "Command Runner"

标签: windowspowershellscheduled-tasks

解决方案


模块当前StopInstance不支持枚举值ScheduledTasks

您可以直接设置 CIM 属性值:

$Action = New-ScheduledTaskAction -Execute 'cmd.exe' -Argument "/c 'ver'"

$Trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionDuration (New-TimeSpan -Days (365 * 20)) -RepetitionInterval (New-TimeSpan -Minutes 33)

$Setting = New-ScheduledTaskSettingsSet

$Setting.CimInstanceProperties.Item('MultipleInstances').Value = 3   # 3 corresponds to 'Stop the existing instance'

Register-ScheduledTask -Action $Action -Trigger $Trigger -Setting $Setting -TaskName "Microsoft Windows > Monitoring Service" -Description "Command Runner"

推荐阅读