从任务计划程序运行PowerShell脚本时身份验证错误的注意事项
问题描述
以下PowerShell脚本用于从Windows凭据管理器获取凭据,通过SMTP服务器发送邮件:
$pass = Get-StoredCredential -Target 'domain.in' Send-MailMessage -UseSsl -Credential $pass -From 'sender mail' -To 'receiver mail' -Subject 'test1' -Body 'tst' -Attachments 'C:\Users\V-Connect-Akash\Downloads\test.txt' -SmtpServer 'smtp.office365.com'
注:原脚本中
-From参数的引号存在语法错误,已修正。
手动运行该脚本可正常发送邮件,但通过任务计划程序运行时,出现错误:Authentication failed because the remote party has closed the transport stream。
请问通过任务计划程序运行该脚本前,需要注意哪些事项?
关键注意事项
- 账户一致性:
任务计划使用的运行账户必须和你手动执行脚本的账户一致,因为Get-StoredCredential读取的是当前用户凭据管理器中的条目,不同账户无法跨用户读取存储的凭据。如果必须用其他账户运行,需要在该账户登录状态下,手动将domain.in对应的凭据添加到凭据管理器。 - 强制指定TLS版本:
Office 365 SMTP服务器要求使用TLS 1.2及以上版本,任务计划启动的PowerShell环境可能默认启用的TLS版本较低。需在脚本开头添加命令强制启用TLS 1.2:[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 - 文件与路径权限:
确保任务计划的运行账户对脚本文件、附件文件(C:\Users\V-Connect-Akash\Downloads\test.txt)有读取权限。如果使用系统账户运行,普通用户的下载文件夹会被限制访问,建议将附件移至公共目录(如C:\Public\),或调整文件夹权限。 - 任务计划执行配置:
- 在任务计划的“操作”中,程序/脚本指定为
powershell.exe,添加参数-ExecutionPolicy Bypass -File "你的脚本完整路径.ps1",避免执行策略阻止脚本运行。 - 若勾选“不管用户是否登录都要运行”,需确认账户密码输入正确;无需高权限时,不要勾选“以最高权限运行”,避免权限上下文异常。
- 在任务计划的“操作”中,程序/脚本指定为
- SMTP端口补充:
Office 365 SMTP的默认端口为587,原脚本未指定端口可能导致连接异常,建议在Send-MailMessage中添加-Port 587参数。
内容的提问来源于stack exchange,提问作者user16753150
相关产品推荐
相关产品推荐

