我一直在使用PowerShell的计划任务的cmdlet来创建我们的服务器上计划任务。
如何选到“运行用户是否登录或没有”使用该API?
我创建action
, trigger
, principal
和settings
对象,并通过他们Register-ScheduledTask
,如下图所示:
$action = New-ScheduledTaskAction -Execute foo.exe -Argument "bar baz"
$trigger = New-ScheduledTaskTrigger -Once -At $startTime -RepetitionInterval (New-TimeSpan -Minutes 1) -RepetitionDuration ([Timespan]::MaxValue)
$principal = New-ScheduledTaskPrincipal -UserId "$($env:USERDOMAIN)\$($env:USERNAME)" -LogonType ServiceAccount
$settings = New-ScheduledTaskSettingsSet -MultipleInstances Parallel
Register-ScheduledTask -TaskName $taskName -TaskPath "\my\path" -Action $action -Trigger $trigger -Settings $settings -Principal $principal
当我创建这样一个计划任务,它默认为“当用户登录时只运行”。
这个问题说明了如何做到这一点使用COM对象, 这其中使用SchTasks.exe会,但使用它我该怎么办*-ScheduledTask*
cmdlet的?
您需要删除$本金并注册一个用户名和密码的任务:
Register-ScheduledTask -TaskName $taskname `
-TaskPath "\my\path" `
-Action $action `
-Trigger $trigger `
-User "$env:USERDOMAIN\$env:USERNAME" `
-Password 'P@ssw0rd' `
-Settings $settings
我不喜欢或目前收视率最高的答案批准的,那么你必须知道你的凭据为一个脚本来做到这一点,不能像帕克或者其他一些系统/配置自动化做到这一点。 还有就是要做到这一点,其Aeyoun提及,但并未深究哪个是正确设置主要为系统用户运行一个更好的/有道。
$action = New-ScheduledTaskAction -Execute foo.exe -Argument "bar baz"
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 1) -RepetitionDuration ([Timespan]::MaxValue)
$principal = New-ScheduledTaskPrincipal -UserID "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount -RunLevel Highest
$settings = New-ScheduledTaskSettingsSet -MultipleInstances Parallel
Register-ScheduledTask -TaskName "tasknamehere" -TaskPath "\my\path" -Action $action -Trigger $trigger -Settings $settings -Principal $principal
“运行是否用户登录或不是”任务计划程序GUI选项等同于New-ScheduledTaskPrincipal -LogonType S4U
。