2016-05-30 3 views
0

Я пытаюсь следовать this example, чтобы прикрепить изображения к электронной почте с помощью powershell. Вот часть кода, который ведет себя странно:Как исправить выражение powershell, которое вызывает ошибку позже в коде

if ($DirectoryInfo) { 
    foreach ($element in $DirectoryInfo) { 
     $failedTest = $element| Select-Object -Expand name   
     $failedTests += $failedTest 
     $failedTestLog = "$PathLog\$failedTest.log" 
     $logContent = [IO.File]::ReadAllText($failedTestLog) 

     $imageDir = "$PathLog\$element\Firefox\*" 
     $imageSearch = Get-ChildItem -Path $imageDir -Include *.png -Recurse -Force 
     $imageFullname = $imageSearch | select FullName | Select-Object -Expand Fullname 
     $imageFilename = $imageSearch | Select-Object -Expand name 
     $imageFilename 
     $imageFullname 

     # *** THE FOLLOWING LINE CAUSES THE ERROR *** 
     $attachment = New-Object System.Net.Mail.Attachment –ArgumentList $imageFullname.ToString() # *** CAUSING ERROR *** 
     #$attachment.ContentDisposition.Inline = $True 
     #$attachment.ContentDisposition.DispositionType = "Inline" 
     #$attachment.ContentType.MediaType = "image/jpg" 
     #$attachment.ContentId = '$imageFilename' 
     #$msg.Attachments.Add($attachment) 

     $outputLog += "  

******************************************** 
$failedTest 
******************************************** 
$logContent  
" 
    } 

} else { 
    $outputLog = '** No failed tests **' 
} 



# Create the Overview report 
$outputSummary = "" 
foreach ($element in $scenarioInfo) { 
    if (CheckTest $failedTests $element) { 
     $outputSummary += " 
$element : FAILED"     # *** ERROR LINE *** 
    } Else { 
     $outputSummary += " 
$element : Passed" 
    } 
} 

Если я закомментируйте строку, которая определяет вложение, код работает отлично. Если я использую код, как это, я получаю следующее сообщение об ошибке:

Unexpected token ':' in expression or statement. 
At D:\Testing\Data\Powershell\LoadRunner\LRmain.ps1:112 char:11 
+ $element : <<<< FAILED" 
    + CategoryInfo   : ParserError: (::String) [], ParseException 
    + FullyQualifiedErrorId : UnexpectedToken 

, который относится к линии в нижней части сценария, где он говорит: «ERROR LINE». Что, черт возьми, происходит? Поведение выглядит совершенно нелогичным для меня! Я не понимаю, как заявление, которое не имеет никакого эффекта, может вызвать ошибку в другом месте! В чем проблема и как ее исправить ...?

Также не имеет значения, использую ли я $imageFullname или $imageFullname.ToString() в оскорбительной строке.

+0

Каков вывод '$ element'? Вы уверены, что между $ element и точкой с запятой есть пробел? –

+0

Да, я уверен. Кроме того, проблема вызвана линией 'System.Net.Mail.Attachment'. Если я прокомментирую эту строку, код «работает» и не вызывает ошибку. Я также не могу найти документацию об использовании 'ArgumentList' с объектом' Attachment' ... – Alex

+0

В вашем примере кода возникают проблемы, не связанные с вопросом. Цитата на «ERROR LINE» охватывает несколько строк, которые не разрешены в PowerShell без использования здесь строк. – TravisEz13

ответ

0

Определить $outputSummary как массив:

$outputSummary = @() 

вместо

$outputSummary = "" 
+0

Ничего не меняет, я получаю ту же ошибку. – Alex

1

Попробуйте заменить "$element : FAILED" на

"$element` : FAILED" 

Реверс цитатой избежит точкой с запятой; который имеет особое значение в PowerShell. (Это позволяет выводить подзапрос: $env:username например)

+0

Но как эта проблема может быть вызвана использованием 'System.Net.Mail.Attachment' в цикле перед этой строкой кода? – Alex

+1

Другой синтаксис, чтобы избежать этого, будет '' $ {element}: FAILED "' – TravisEz13

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