我试图将几个参数传递给$ attachments参数中的以下脚本,这似乎适用于单个附件,或者当路径中没有空格时,但是当传递多个时当一个或多个脚本在路径中出现空格而脚本失败并指示它无法找到指定的文件时,该值为数组。
为了增加难度,这是从c#启动的。我已尝试过以下命令的几种排列。整个命令行看起来像这样:
powershell.exe -executionpolicy unrestricted -file "c:\program files (x86)\App\Samples\SendEmail.ps1" -attachments "c:\Program Files (x86)\App\Logs\1234.log,c:\Program Files (x86)\App\Logs\12345.log"
剧本:
param(
[array]$attachments,
[string]$from = 'test@test.com',
[array]$to = 'test@test.com',
[string]$subject = 'Threshold Exceeded',
[string]$body = 'Testing. Please ignore.',
[string]$smtpServer = 'testsmptserver.com'
)
$mailParams = @{
From = $from
To = $to
Subject = $subject
Body = $body
SMTPServer = $smtpServer
}
if ($attachments)
{
Get-ChildItem $attachments | Send-MailMessage @mailParams
}
else
{
Send-MailMessage @mailParams
}
有没有人遇到过这样的事情?你是怎么解决的?
答案 0 :(得分:1)
您需要拆分$ attachments变量,因为它被视为单个文件。
而不是
Get-ChildItem $attachments
尝试
Get-ChildItem ($attachments -split ',')
答案 1 :(得分:0)
您只将一个(引用的)字符串传递给“附件”数组,因此您只填充附件[0]。 尝试传递多个字符串:
PS C:\Windows\system32> [array]$wrong="there,you,go"
PS C:\Windows\system32> $wrong
there,you,go
PS C:\Windows\system32> $wrong[0]
there,you,go
PS C:\Windows\system32> $wrong[1]
PS C:\Windows\system32> $wrong[2]
PS C:\Windows\system32> [array]$right="there","you","go";
PS C:\Windows\system32> $right
there
you
go
PS C:\Windows\system32> $right[0]
there
PS C:\Windows\system32> $right[1]
you
PS C:\Windows\system32> $right[2]
go
PS C:\Windows\system32>
从那里开始,你应该很清楚你可以包括这样的前导或尾随空格:
-attachments "value 1 has a trailing space "," value 2 has a leading space"
得到:
attachments[0]="value 1 has a trailing space ";
attachments[1]=" value 2 has a leading space";
你提到你是在C#中运行它,所以我会提醒读者也要在包含这个命令的C#字符串中转义每个引号(“ - > \”)。