Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 新ScheduledTaskSettingsSet过期任务_Powershell_Taskscheduler - Fatal编程技术网

Powershell 新ScheduledTaskSettingsSet过期任务

Powershell 新ScheduledTaskSettingsSet过期任务,powershell,taskscheduler,Powershell,Taskscheduler,我目前正在尝试创建一个Powershell脚本,总体目标是在我的VM上创建一个计划任务,该任务将在特定时间重新启动远程计算机。我目前遇到的问题是试图将任务设置为过期,并在任务完成后删除 令人困惑的一点是,cmdlet想要的变量类型与现有变量在系统中的显示方式之间似乎存在差异。例如,我有一个虚拟任务: -在触发器选项卡中于2017年3月16日晚上11:00运行一次,并于2017年3月16日晚上11:30到期 -具有“设置”下的“如果任务未计划再次运行,请在:立即后删除”设置 如果我使用Get Sc

我目前正在尝试创建一个Powershell脚本,总体目标是在我的VM上创建一个计划任务,该任务将在特定时间重新启动远程计算机。我目前遇到的问题是试图将任务设置为过期,并在任务完成后删除

令人困惑的一点是,cmdlet想要的变量类型与现有变量在系统中的显示方式之间似乎存在差异。例如,我有一个虚拟任务: -在触发器选项卡中于2017年3月16日晚上11:00运行一次,并于2017年3月16日晚上11:30到期 -具有“设置”下的“如果任务未计划再次运行,请在:立即后删除”设置

如果我使用Get ScheduledTask查看现有任务,这些值的含义如下:

如果我使用Get成员,这些值就是字符串

现在,我的问题的一部分可能完全是因为我使用了错误的cmdlet来执行此操作(昨天刚刚开始处理此问题)。我在测试此操作时使用的基本脚本是:

    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