You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 19:25:19