2016-08-12 87 views
1

我試圖創建一個默認值模塊,看起來是這樣的:PowerShell的麻煩模塊創建

function Send-Mail ($EmailTo = "[email protected]" , $Body = "Warning! Technical Maintance today", $Subject = "*** Warning! ***") 
{ 
$EmailFrom = "[email protected]" 
$SMTPServer = "mail.example.com" 
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
$SMTPClient.EnableSsl = $true 
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("it", "Hjcnthv1"); 
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body) 
} 

Export-ModuleMember -Function 'Send-Mail' 

然後我試圖使用它:

Import-Module '\\dc01\scripts$\_server\Send-Mail.psm1' 
Send-Mail [email protected] "Text" "Subject" 

但我收到錯誤:

Exception calling "Send" with "4" argument(s): "Failure sending mail." 
At \\dc01\scripts$\_server\Send-Mail.psm1:14 char:1 
+ $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body) 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : SmtpException 

我在做什麼錯?

+0

我不知道發送呼叫中的括號是否是問題。我知道你不應該讓它們用於PowerShell函數調用,因爲它們將所有參數轉換爲一個對象,如果將它們放在括號中,並因此作爲單個參數傳入。我只是不確定這是否與.NET對象的方法調用一樣。 – n3wjack

+0

所以基本上,我說的是試試這個:'$ SMTPClient.Send $ EmailFrom,$ EmailTo,$ Subject,$ Body' – n3wjack

+0

括號不是問題。方法調用需要一個基於數組的參數列表。 –

回答

0

您的模塊創建沒問題,錯誤取決於您的功能無法正常工作。嘗試在發送之前先創建消息對象。

$msg = New-object System.Net.Mail.MailMessage -ArgumentList @($EmailFrom,$EmailTo,$Subject,$Body) 
$SMTPClient.Send($msg) 

您還選擇啓用SSL而無需爲您的SMTP客戶端提供證書$SMTPClient.ClientCertificates。當您提供憑據時,您可能不需要SSL,因此您可以刪除行$SMTPClient.EnableSsl = $true

在旁註中,您可以添加以下內容以在使用後處置對象。

$msg.Dispose() 
$SMTPClient.Dispose() 
+0

@ user3301252如果這個問題有幫助或回答你的問題,請接受或upvote它。 – Richard