如何通过PowerShell取消计划任务的‘不存储密码’选项?
解决PowerShell Scheduled Job无法取消“不存储密码”选项的问题
你遇到的问题源于Register-ScheduledJob是PowerShell对计划任务的高层封装,默认启用了DoNotStorePassword设置(对应GUI里的“不存储密码。任务仅能访问本地资源”)。要通过脚本修改该配置,需在创建任务后直接调整底层计划任务的属性,具体操作如下:
1. 补充修改逻辑到原有代码
执行你原有的Register-ScheduledJob代码后,添加以下脚本修改任务设置:
# 获取已创建的Scheduled Job对应的计划任务(注意任务路径固定为\Microsoft\Windows\PowerShell\ScheduledJobs\) $task = Get-ScheduledTask -TaskName "Collect Logs" -TaskPath "\Microsoft\Windows\PowerShell\ScheduledJobs\" # 取消“不存储密码”设置 $task.Settings.DoNotStorePassword = $false # 设置登录类型为“密码”(确保系统加密存储凭据,支持网络访问) $task.Principal.LogonType = [Microsoft.PowerShell.ScheduledJob.TaskLogonType]::Password # 保存修改 Set-ScheduledTask -InputObject $task
2. 关键注意事项
Register-ScheduledJob本身没有直接控制该选项的参数,默认优先本地资源访问的安全配置,因此必须通过底层计划任务对象修改。- 修改
DoNotStorePassword = $false前,必须确保注册任务时已通过-Credential参数提供有效凭据,系统会加密存储该凭据,否则任务仍无法访问网络资源。 - 若不指定
-Credential,任务会以当前用户身份运行,但依然无法存储密码,因此必须显式提供凭据才能关闭该选项。
3. 完整示例代码
$task_path = 'path to file' $credential = Get-Credential # 或提前通过其他方式获取凭据 # 注册Scheduled Job $scheduled_job_options = New-ScheduledJobOption -WakeToRun -StartIfIdle -ContinueIfGoingOnBattery $scheduled_job_triggers = New-JobTrigger -Once -At "10:00AM" -RepetitionInterval (New-TimeSpan -Hours 6) -RepetitionDuration ([TimeSpan]::MaxValue) Register-ScheduledJob -Name "Collect Logs" -FilePath $task_path -ScheduledJobOption $scheduled_job_options -Trigger $scheduled_job_triggers -Credential $credential # 修改计划任务的密码存储设置 $task = Get-ScheduledTask -TaskName "Collect Logs" -TaskPath "\Microsoft\Windows\PowerShell\ScheduledJobs\" $task.Settings.DoNotStorePassword = $false $task.Principal.LogonType = [Microsoft.PowerShell.ScheduledJob.TaskLogonType]::Password Set-ScheduledTask -InputObject $task
内容的提问来源于stack exchange,提问作者Dmitry Dorofeev
相关产品推荐
相关产品推荐

