Powershell 新ScheduledTaskSettingsSet过期任务
我目前正在尝试创建一个Powershell脚本,总体目标是在我的VM上创建一个计划任务,该任务将在特定时间重新启动远程计算机。我目前遇到的问题是试图将任务设置为过期,并在任务完成后删除 令人困惑的一点是,cmdlet想要的变量类型与现有变量在系统中的显示方式之间似乎存在差异。例如,我有一个虚拟任务: -在触发器选项卡中于2017年3月16日晚上11:00运行一次,并于2017年3月16日晚上11:30到期 -具有“设置”下的“如果任务未计划再次运行,请在:立即后删除”设置 如果我使用Get ScheduledTask查看现有任务,这些值的含义如下: 如果我使用Get成员,这些值就是字符串 现在,我的问题的一部分可能完全是因为我使用了错误的cmdlet来执行此操作(昨天刚刚开始处理此问题)。我在测试此操作时使用的基本脚本是:Powershell 新ScheduledTaskSettingsSet过期任务,powershell,taskscheduler,Powershell,Taskscheduler,我目前正在尝试创建一个Powershell脚本,总体目标是在我的VM上创建一个计划任务,该任务将在特定时间重新启动远程计算机。我目前遇到的问题是试图将任务设置为过期,并在任务完成后删除 令人困惑的一点是,cmdlet想要的变量类型与现有变量在系统中的显示方式之间似乎存在差异。例如,我有一个虚拟任务: -在触发器选项卡中于2017年3月16日晚上11:00运行一次,并于2017年3月16日晚上11:30到期 -具有“设置”下的“如果任务未计划再次运行,请在:立即后删除”设置 如果我使用Get Sc
function Create-Task ($Computer,$Time)
{
$Task = New-ScheduledTaskAction -Execute 'cmd.exe'`
-Argument "/c `"Shutdown /m \\$Computer /r /t 0`""
$Trigger = New-ScheduledTaskTrigger -Once -At $Time
$Settings = New-ScheduledTaskSettingsSet -ExecutionTimeLimit 'PT72H' -DeleteExpiredTaskAfter 'PT0S'
Register-ScheduledTask -Action $Task -Trigger $Trigger -TaskName "Test" -Description "Testing this out" -Settings $Settings
}
$Comp = "WIN7-0031B"
[datetime]$TriggerTime = '3/16/2017 11:00PM'
Create-Task -Computer $Comp -Time $TriggerTime
当我查看New ScheduledTaskSettings cmdlet的Get Member时,它再次指出这些值是字符串
但是,如果我尝试按原样运行脚本,它会抱怨它们不是日期时间变量:
“新ScheduledTaskSettings:无法处理参数“ExecutionTimeLimit”的参数转换。无法将值“PT72H”转换为类型“System.TimeSpan”。错误:“字符串未被识别为有效的TimeSpan。”
(我会发布一个截图,但我刚刚加入StackOverflow,因此没有声誉)。
到目前为止,我尝试将$Settings变量更改为以下内容:
$Settings = New-ScheduledTaskSettingsSet -ExecutionTimeLimit (New-TimeSpan -Minutes 30).Minutes -DeleteExpiredTaskAfter (New-TimeSpan -Seconds 0).Seconds
及
在这两种情况下,它都不会生成任何错误消息,但不会创建设置。我想知道这样做是否需要在没有设置的情况下创建任务,然后执行类似于
Get-ScheduledTask -TaskName 'Test' | Set-ScheduledTask <Some other code here>
Get ScheduledTask-TaskName'Test'| Set ScheduledTask
方法的类型,但不能100%确定如何做到这一点。我对powershell有点陌生,也完全不熟悉如何通过powershell创建计划任务,如果有任何帮助,我将不胜感激!Powershell的版本是版本5
编辑注释:看起来,当我将脚本粘贴到StackOverflow时,它显示的大部分内容都在引号内,不确定原因,但在我的ISE中,它正确地显示了内容。最终能够使其正常工作。我发现了一篇额外的StackOverflow帖子和一篇文章,帮助我找到了正确的方向: 工作脚本(至少在使此特定方面正常工作方面)是: 我还注意到,我从一开始就做错了一件事,那就是我混淆了ExecutionTimeLimit和EndBoundary属性
同样作为参考,如果您尝试在没有以管理员身份运行ISE的情况下在ISE中运行此功能,您很可能会遇到访问被拒绝的问题。我计划基本上把这个脚本作为一个计划任务,寻找一个CSV文件来创建其他任务,并将它作为系统运行,这样就不会有问题了。但是为了防止有人在这个线程中遇到问题
$Settings=New scheduledtasksettingset-ExecutionTimeLimit(New TimeSpan-Minutes 30)-DeleteExpiredTaskAfter(New TimeSpan-Seconds 0)
,但是我认为0将是null,所以它不希望使用该参数。
Get-ScheduledTask -TaskName 'Test' | Set-ScheduledTask <Some other code here>
function Create-Task ($Computer,$Time)
{
$ActionArgs = "/c `"Shutdown /m \\$Computer /r /t 0`""
$TaskAction = New-ScheduledTaskAction -Execute 'cmd.exe' -Argument $ActionArgs
$TaskUserName = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount
$TaskSettings = New-ScheduledTaskSettingsSet -Compatibility V1 -ExecutionTimeLimit (New-TimeSpan -Minutes 30) -DeleteExpiredTaskAfter (New-TimeSpan -Seconds 0)
$TaskTrigger = New-ScheduledTaskTrigger -Once -At $Time
$Task = New-ScheduledTask -Action $TaskAction -Trigger $TaskTrigger -Principal $TaskUserName -Settings $TaskSettings
Register-ScheduledTask -TaskName "Test" -InputObject $Task -Force
$RegisteredTask = Get-ScheduledTask -TaskName "Test"
$RegisteredTask.Triggers[0].EndBoundary = $Time.AddMinutes(30).ToString('s')
$RegisteredTask.Settings.DeleteExpiredTaskAfter = 'PT0S'
$RegisteredTask | Set-ScheduledTask -User "NT AUTHORITY\SYSTEM"
}
$Comp = "WIN7-0031B"
[datetime]$TriggerTime = '3/17/2017 11:00PM'
Create-Task -Computer $Comp -Time $TriggerTime