在命令行上获取密码的Powershell脚本

时间:2014-02-07 23:33:20

标签: email powershell

我有一个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)

1 个答案:

答案 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”可能因“\”而被删除。