2013-09-16 6 views
3

Я работаю над скриптом PowerShell для отправки электронной почты, а некоторые параметры могут содержать специальные символы, такие как% и &.Параметры PowerShell со специальными символами

powershell.exe .\sendmail.ps1 -to "[email protected]" -body "Special character & causing trouble." -subject 'PowerShell email' 

Это дает следующее сообщение об ошибке:

Ampersand not allowed. The & operator is reserved for future use; use "&" to pass ampersand as a string. 
+ CategoryInfo   : ParserError: (:) [], ParentContainsErrorRecordException 
+ FullyQualifiedErrorId : AmpersandNotAllowed 

Я пытался уйти от & с `. Но параметр все равно не будет правильно включен в скрипт.

Я ищу способ убедиться, что параметры будут правильно переданы скрипту, включая специальные символы. Я думаю об использовании кодированного кода или, возможно, размещении параметров в XML-файле.

Любые предложения приветствуются.

Вот сценарий, я использую:

param (
    [string]$body = "", 
    [string]$subject = $(throw "-subject is required."), 
    [string]$attachment = "", 
    [string]$to = "" 
) 

Try 
{ 
    $o = [Runtime.InteropServices.Marshal]::GetActiveObject("Outlook.Application") 
} 
Catch 
{ 
    $o = New-Object -com Outlook.Application 
} 

$mail = $o.CreateItem(0) 

$mail.subject = "Auto Build Test" 

$mail.body = $body 

#for multiple email, use semi-colon ; to separate 
$mail.To = $to 
$mail.Attachments.Add($attachment) 
$mail.Display(0) 

ответ

9

Попробуйте вызвать скрипт таким образом, и дайте мне знать:

powershell.exe -command "& .\sendmail.ps1 -to [email protected] -body 'Special character & causing trouble.' -subject 'PowerShell email'" 
+0

Вау, это на самом деле работает! Даже с другими специальными символами. По-видимому, мне не хватает «оператора вызова», –

3

просто использовать ' вместо " для выключения расширения

powershell.exe .\sendmail.ps1 -to "[email protected]" -body 'Special character & causing trouble.' -subject 'PowerShell email'

+0

К сожалению, t шляпа не работает. В строке отсутствует терминатор: '. + CategoryInfo: ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId: TerminatorExpectedAtEndOfString –

+1

Это прекрасно работает на PS V2 и PS V3, и ваша проблема может возникнуть, возможно, в вашем sendmail.ps1. Покажите свой скрипт, если вам нужна дополнительная помощь. Это то, что я запускал 'PS> Send-MailMessage -to" [email protected] "-body 'Специальный характер и вызывал проблемы.' -subject «Электронная почта PowerShell» - от titi @ toto.com'' –

+0

Благодарим вас за ввод. Я включил сценарий в свой вопрос. –

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