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

PowerShell使用Send-MailMessage时PSCredential无重载错误如何解决

问题解决方法

核心错误原因

System.Management.Automation.PSCredential 类的构造函数仅接受明文用户名 + 安全字符串格式的密码作为入参,你直接传入普通明文格式的密码,无法匹配构造函数的参数要求,就会触发重载不匹配的报错。你之前使用ConvertTo-SecureString报错,是因为缺少必要参数:PowerShell 默认禁止直接将明文转换为安全字符串,必须显式添加-AsPlainText和-Force参数确认操作。

修正后可用代码

$CredUser = "123UserPass"
$CredPassword = "1234/5678/999"
# 将明文密码转换为安全字符串
$SecurePassword = ConvertTo-SecureString -String $CredPassword -AsPlainText -Force
# 构造PSCredential对象
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $CredUser, $SecurePassword
# 发送邮件
Send-MailMessage -SmtpServer "smtp.amazonaws.com" -Port 587 -Credential $Credential -UseSsl -From 'DBATeam@email.com' -To 'me@email.com' -Subject 'TEST'

如果你使用的是PowerShell 5.1及以上版本,也可以用更简洁的语法构造凭据,不需要调用New-Object:

$Credential = [System.Management.Automation.PSCredential]::new($CredUser, $SecurePassword)

额外注意事项

  • 不要在生产环境的脚本中硬编码明文账号密码,你可以将加密后的凭据存储到本地文件、系统凭据管理器或者专用的密钥管理服务中,避免敏感信息泄露。
  • 微软官方已标记Send-MailMessage为过时 cmdlet,原因是其不支持现代邮件认证协议,如果你的邮件服务要求使用OAuth2等现代认证方式,建议替换为MailKit类库实现邮件发送功能。

内容的提问来源于stack exchange,提问作者Serdia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:42:02