2016-11-07 2 views
0

Я написал сценарий, который собирает журналы с нескольких серверов, затем зашифровывает их и отправляет по электронной почте. Поскольку получатели этих писем могут отличаться в зависимости от ситуации, я решил использовать пользовательский ввод, а не жесткий код адресов электронной почты. Это то, что у меня есть:Как использовать переменную read-host в аргументе send-mailmessage

$to = '"' + (read-host -prompt "Send to") + '"' 
do { 
Write-host "Add another recipient?" 
$choice = read-host -prompt "[y/n]" 
switch ($choice) { 
'y'{ 
$add = ',"' + (read-host -prompt "Send to") + '"' 
$to = -Join ($to, $add) 
} 
} 
} 
until ($choice -eq 'n') 
$issuenum = read-host -prompt "Issue Number (enter if none)" 
$title = read-host -prompt "Email Title" 
$body = read-host -prompt "Message" 
Send-MailMessage -To $to -From "[email protected]" -SMTPServer smtpserver.com -Subject "[$issuenum] $title" -body $body -attachments $attachments 
} 

Однако при запуске скрипта я получаю следующее сообщение об ошибке:

Send-MailMessage : An invalid character was found in the mail header: '"'. 
At C:\PATH\SCRIPT.ps1:431 char:1 
+ Send-MailMessage -To $to -From "[email protected]" -SMTPServer ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
+ CategoryInfo   : InvalidType: (:) [Send-MailMessage], FormatException 
+ FullyQualifiedErrorId : FormatException,Microsoft.PowerShell.Commands.SendMailMessage 

Send-MailMessage : A recipient must be specified. 
At C:\PATH\SCRIPT.ps1:431 char:1 
+ Send-MailMessage -To $to -From "[email protected]" -SMTPServer ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
+ CategoryInfo   : InvalidOperation: (System.Net.Mail.SmtpClient:SmtpClient) [Send-MailMessage], InvalidOperationException 
+ FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.SendMailMessage 

Когда я показываю значение моего $ к переменной выводит то, что я ожидал увидеть: правильный формат аргумента send-mailmessage -to.

"[email protected]","[email protected]" 

Что я делаю неправильно?

+0

Вам нужно пройти, чтобы отправить-MailMessage строку [] массив. [string []] $ recipients = "[email protected]", "[email protected]" –

ответ

0

"a","b", набранный в PowerShell, представляет собой массив из 2 литеральных строк, не содержащий кавычек, без запятой.

"a","b" Расчетный код - это 1 строка, содержащая четыре кавычки и запятая.

Send-MailMessage построен для работы с первым.

Попробуйте сделать $to в массив строк:

$to = @(read-host -prompt "Send to") 
do { 
    Write-host "Add another recipient?" 
    $choice = read-host -prompt "[y/n]" 
    switch ($choice) { 
     'y'{ 
      $to += (read-host -prompt "Send to") 
     } 
    } 
} 
until ($choice -eq 'n') 
+0

Это сработало отлично! Спасибо за объяснение. – TheAlmightyOverSeer

0

Проблема эта линия:

$to = '"' + (read-host -prompt "Send to") + '"' 

Вы добавляете буквенные двойные кавычки " внутри строки.

$to = read-host -prompt "Send to" 

Это все, что вам нужно.

Когда вы используете строку с котировкой в ​​своем коде, цитаты сообщают парсера , что это строка; они не являются частью контента.

Так, при задании параметра с буквальным, вам может понадобиться кавычки (опять-таки для парсер):

-To '[email protected]' 

Но когда вы используете переменную, переменная не должна содержать эти кавычки.

Смежные вопросы