无法设置 "Run whether user is logged on or not"
Unable to set "Run whether user is logged on or not"
我有一个 Powershell 脚本来添加新的计划任务。它用于启动 PS1 文件,其中包括一些 SQL 在本地 SQL 框和远程 SQL 框上查询。
如果此脚本创建了时间表,我必须手动进行一项更改才能使其生效:我必须设置选项 "Run whether user is logged on or not"。
函数如下:
function createschedule {
$startdatetime = (get-date).AddMinutes(1).ToString("HH:mm")
$taskName = "My Bestest Schedule"
$action = New-ScheduledTaskAction -Execute 'Powershell.exe' -Argument '-file "C:\mypath\bin\mypowershellscript.ps1"'
$trigger = New-ScheduledTaskTrigger -Once -At $startdatetime
$settings = New-ScheduledTaskSettingsSet -StartWhenAvailable
echo ""
echo "Adding Basic parameterized task..."
Register-ScheduledTask -TaskName $taskName -Trigger $trigger -Action $action -Setting $settings -User "Administrator" -description "Sitewatch v2 Collector" -RunLevel 1 | Out-null
$trigger.RepetitionInterval = (New-TimeSpan -Minutes 1)
$trigger.RepetitionDuration = (New-TimeSpan -Days 1000)
echo "Adding trigger to the new task..."
Set-ScheduledTask $taskName -Trigger $trigger | Out-Null
echo ""
}
当脚本创建条目时,命令 运行s 并弹出 window 几秒钟。它仍然有效,但只有在登录时才有效。如果我手动切换设置,它在注销后也能正常工作。
我有的东西 tried/considered:
- 将用户更改为 NETWORKSERVICE 或 SYSTEM,但在进行查询时无法使用 SQL 进行身份验证
- 我找到了一个开关
-logontype ServiceAccount
但它似乎不起作用
- 我尝试使用 'Principal' 部分:
#$principal = New-ScheduledTaskPrincipal -GroupID "BUILTIN\Administrators"
但这也会出错
- 最后,我不能简单地提供密码,因为这将是 运行 在具有不同管理员密码(或我设置的任何管理员用途)的不同盒子上
看着这个post,我无法确定我需要什么:How to set schedule.service "Run whether user is logged on or not" in Powershell?
此外,Microsoft 似乎说只要有一个 Principal,它就会启用一项任务 运行 无论用户是否登录,但它对我不起作用:
Detailed Description The New-ScheduledTaskPrincipal cmdlet creates an
object that contains a scheduled task principal. Use a scheduled task
principal to run a task under the security context of a specified
account. When you use a scheduled task principal, Task Scheduler can
run the task regardless of whether that account is logged on.
在此处找到:https://technet.microsoft.com/en-us/library/jj649825.aspx
谢谢。
您可以直接使用 SCHTASKS.exe
和如下命令。
$newtask = {SCHTASKS /create /v1 /s $ComputerName /ru "Administrator" /rp "MyPlanTextPass" /sc once /tn "My BesTest Schedule" /st "23:00:00" /tr "C:\Temp\Test.bat"}
Invoke-Command $newtask
我没有其他任务调度 cmdlet 来尝试其他任何东西,所以我想我会把它作为一个选项。
我进行了更多搜索,得到了一些很好的例子。
function createschedule {
$startdatetime = (get-date).AddMinutes(1).ToString("HH:mm")
$jobname = "My bestest Schedule"
$repeat = (New-TimeSpan -Minutes 1)
$action = New-ScheduledTaskAction –Execute "$pshome\powershell.exe" -Argument '-file "C:\mypath\bin\mypowershellscript.ps1"'
$duration = ([timeSpan]::maxvalue)
$trigger = New-ScheduledTaskTrigger -Once -At $startdatetime -RepetitionInterval $repeat -RepetitionDuration $duration
$msg = "Enter the username and password that will run the task";
$credential = $Host.UI.PromptForCredential("Task username and password",$msg,"$env:userdomain$env:username",$env:userdomain)
$username = $credential.UserName
$password = $credential.GetNetworkCredential().Password
$settings = New-ScheduledTaskSettingsSet -StartWhenAvailable -RunOnlyIfNetworkAvailable -DontStopOnIdleEnd
Register-ScheduledTask -TaskName $jobname -Action $action -Trigger $trigger -RunLevel Highest -User $username -Password $password -Settings $settings | out-null
echo ""
}
我认为我的问题是 "Run whether user is logged on or not" 无法设置,除非使用真实用户并提供密码。使用上面的代码,我提示输入凭据(这非常适合我的用例)并用于注册。设置 "Run whether user is logged on or not" 现在设置正确。
我有一个 Powershell 脚本来添加新的计划任务。它用于启动 PS1 文件,其中包括一些 SQL 在本地 SQL 框和远程 SQL 框上查询。
如果此脚本创建了时间表,我必须手动进行一项更改才能使其生效:我必须设置选项 "Run whether user is logged on or not"。
函数如下:
function createschedule {
$startdatetime = (get-date).AddMinutes(1).ToString("HH:mm")
$taskName = "My Bestest Schedule"
$action = New-ScheduledTaskAction -Execute 'Powershell.exe' -Argument '-file "C:\mypath\bin\mypowershellscript.ps1"'
$trigger = New-ScheduledTaskTrigger -Once -At $startdatetime
$settings = New-ScheduledTaskSettingsSet -StartWhenAvailable
echo ""
echo "Adding Basic parameterized task..."
Register-ScheduledTask -TaskName $taskName -Trigger $trigger -Action $action -Setting $settings -User "Administrator" -description "Sitewatch v2 Collector" -RunLevel 1 | Out-null
$trigger.RepetitionInterval = (New-TimeSpan -Minutes 1)
$trigger.RepetitionDuration = (New-TimeSpan -Days 1000)
echo "Adding trigger to the new task..."
Set-ScheduledTask $taskName -Trigger $trigger | Out-Null
echo ""
}
当脚本创建条目时,命令 运行s 并弹出 window 几秒钟。它仍然有效,但只有在登录时才有效。如果我手动切换设置,它在注销后也能正常工作。
我有的东西 tried/considered:
- 将用户更改为 NETWORKSERVICE 或 SYSTEM,但在进行查询时无法使用 SQL 进行身份验证
- 我找到了一个开关
-logontype ServiceAccount
但它似乎不起作用 - 我尝试使用 'Principal' 部分:
#$principal = New-ScheduledTaskPrincipal -GroupID "BUILTIN\Administrators"
但这也会出错 - 最后,我不能简单地提供密码,因为这将是 运行 在具有不同管理员密码(或我设置的任何管理员用途)的不同盒子上
看着这个post,我无法确定我需要什么:How to set schedule.service "Run whether user is logged on or not" in Powershell?
此外,Microsoft 似乎说只要有一个 Principal,它就会启用一项任务 运行 无论用户是否登录,但它对我不起作用:
Detailed Description The New-ScheduledTaskPrincipal cmdlet creates an object that contains a scheduled task principal. Use a scheduled task principal to run a task under the security context of a specified account. When you use a scheduled task principal, Task Scheduler can run the task regardless of whether that account is logged on.
在此处找到:https://technet.microsoft.com/en-us/library/jj649825.aspx
谢谢。
您可以直接使用 SCHTASKS.exe
和如下命令。
$newtask = {SCHTASKS /create /v1 /s $ComputerName /ru "Administrator" /rp "MyPlanTextPass" /sc once /tn "My BesTest Schedule" /st "23:00:00" /tr "C:\Temp\Test.bat"}
Invoke-Command $newtask
我没有其他任务调度 cmdlet 来尝试其他任何东西,所以我想我会把它作为一个选项。
我进行了更多搜索,得到了一些很好的例子。
function createschedule {
$startdatetime = (get-date).AddMinutes(1).ToString("HH:mm")
$jobname = "My bestest Schedule"
$repeat = (New-TimeSpan -Minutes 1)
$action = New-ScheduledTaskAction –Execute "$pshome\powershell.exe" -Argument '-file "C:\mypath\bin\mypowershellscript.ps1"'
$duration = ([timeSpan]::maxvalue)
$trigger = New-ScheduledTaskTrigger -Once -At $startdatetime -RepetitionInterval $repeat -RepetitionDuration $duration
$msg = "Enter the username and password that will run the task";
$credential = $Host.UI.PromptForCredential("Task username and password",$msg,"$env:userdomain$env:username",$env:userdomain)
$username = $credential.UserName
$password = $credential.GetNetworkCredential().Password
$settings = New-ScheduledTaskSettingsSet -StartWhenAvailable -RunOnlyIfNetworkAvailable -DontStopOnIdleEnd
Register-ScheduledTask -TaskName $jobname -Action $action -Trigger $trigger -RunLevel Highest -User $username -Password $password -Settings $settings | out-null
echo ""
}
我认为我的问题是 "Run whether user is logged on or not" 无法设置,除非使用真实用户并提供密码。使用上面的代码,我提示输入凭据(这非常适合我的用例)并用于注册。设置 "Run whether user is logged on or not" 现在设置正确。