我有一个PowerShell脚本,我正在尝试发送电子邮件。问题是我希望能够调用脚本并传递一些参数,包括smtp服务器,电子邮件地址,用户名和密码。问题是powershell脚本不喜欢在命令行中输入密码。我必须硬编码密码。有没有办法解决?另外一点信息是,有时这是有效的。问题是,当我从这个脚本命中数据库时,就是密码被阻塞的时候。但我根本不在数据库中使用密码。任何人都可以对此有所了解吗?
$smtpServer = $args[0]
$EmailTo = $args[1]
$UserName = $args[2]
$Password = $args[3]
$Subject = "Some Subject"
$EmailFrom = "Some@dude.com"
$Body = "Bunch of data here"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("MyUserName", "MyPassword")
#$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("MyUserName", "MyPassword") --this won't work
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
答案 0 :(得分:2)
您可以在命令行中以纯文本形式传递密码,但需要将其转换为SecureString对象,然后NetworkCredentials可以使用该密码。
http://myitforum.com/cs2/blogs/yli628/archive/2007/09/22/how-to-enter-password-as-secure-string.aspx
您也可以将Get-Credential更改为“仅限命令行”,但是您仍然需要拆分用户名和密码是什么:
http://www.powershellmagazine.com/2013/02/11/pstip-get-credential-at-the-command-line/
过去,我似乎记得其中一个解决方案似乎存在“DOMAIN \ username”类型凭据的问题,特别是“DOMAIN”可能因“\”而被删除。