Powershell, передающий массив другому скрипту, превращает систему в hastable? Фикс? - PullRequest
0 голосов
/ 09 января 2019

В Powershell я пытаюсь передать массив в качестве аргумента второму сценарию, однако, согласно отладчику, этот сценарий управляется вторым сценарием как объект system.collection.hashtable. Как я могу это исправить?

код вызывающего скрипта

$images = @{ 
   image1 = "$dir\welcomeMessageAtaP1_files\image001.jpg" 
}  
..\sendmail.ps1 –subject $subject1 –body $fixed3 -recipient $personalemail -images $images

код sendmail.ps1

 param (
    [string]$subject = "** EMPTY **",
    [string]$body = "** EMPTY **",
    [string]$recipient = "email@somedomain",
    [string[]] $images=@()
 )
$params = @{ 
    InlineAttachments = $images 
    Body = $body 
    BodyAsHtml = $true 
    Subject = $subject 
    From = "emailsender@somedomain"
    To = $recipient 
    SmtpServer = 'smtp.gmail.com' 
    Port = 587 
    UseSsl = $true 
} 

Send-MailMessage @params -Credential $cred

Выдает ошибку «Send-MailMessage: не удается обработать преобразование аргумента для параметра« InlineAttachments ». Не удается преобразовать значение« System.String [] »типа« System.String [] »в тип« System.Collections.Hashtable » .

Попытался также изменить параметр на [string] $images=@()

1 Ответ

0 голосов
/ 09 января 2019

Вы действительно передаете Hashtable. @{} создает Hashtable, и у вас есть ключ Image1 и значение "$dir\welcomeMessageAtaP1_files\image001.jpg"

$images = @{ 
   image1 = "$dir\welcomeMessageAtaP1_files\image001.jpg" 
} 

вместо передачи массива @():

$images = @( 
       "$dir\welcomeMessageAtaP1_files\image001.jpg" 
    )
...