2014-02-07 50 views
0

我有一個我試圖發送電子郵件的PowerShell腳本。問題是我希望能夠調用腳本並傳入一些參數,包括smtp服務器,電子郵件地址,用戶名和密碼。問題在於powershell腳本不喜歡在命令行上輸入密碼。我必須對密碼進行硬編碼。有沒有辦法解決?還有一點信息是,有時候這是有效的。問題是,當我從這個腳本中打開數據庫時,就是密碼阻塞的時候。但是我根本不使用數據庫中的密碼。任何人都可以對此有所瞭解嗎?在命令行上輸入密碼的Powershell腳本

$smtpServer = $args[0] 
$EmailTo = $args[1] 
$UserName = $args[2] 
$Password = $args[3] 

$Subject = "Some Subject" 
$EmailFrom = "[email protected]" 
$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

「你不喜歡」是什麼意思?你的腳本崩潰了嗎?如果是這樣,那麼錯誤是什麼?它是否默默地失敗?還有別的嗎? –

+0

是的,有一個錯誤,但我沒有看到這個錯誤,如果我硬編碼的密碼。使用「4」參數調用「發送」的異常:「郵箱不可用。服務器響應爲:5.1.0需要驗證」 At。\ SendEmail.ps1:50 char:8 + $ SMTPClient.Send <<< <($ EmailFrom,$ EmailTo,$主題,$正文) + CategoryInfo:NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId:DotNetMethodException - – BriceTRockindale

+0

什麼版本的PowerShell您使用的?如果您至少有V2,則Send-MailMessage cmdlet應該能夠替換該函數。這會給你傳遞參數的命名參數,這可能比參數列表更好。 – mjolinor

回答

2

可以通過在純文本的命令行一個密碼,但是它需要被轉換爲SecureString的對象,然後它可以通過NetworkCredentials使用。

http://myitforum.com/cs2/blogs/yli628/archive/2007/09/22/how-to-enter-password-as-secure-string.aspx

您還可以更改GET-憑據工作「命令行唯一的」,但你仍然需要打出什麼是用戶名,什麼是密碼:

http://www.powershellmagazine.com/2013/02/11/pstip-get-credential-at-the-command-line/

過去,我似乎記得其中一種解決方案看起來似乎遇到了「DOMAIN \ username」類型憑據的問題,特別是「DOMAIN \」可能因「\」而丟失。

+0

真棒,謝謝你! – BriceTRockindale

相關問題