我有这个主要工作。我试图在splatting之前添加一个参数到我的哈希表。但是,我试图添加的参数是两个字符串的集合。
main.py
当然,powershell会将此视为三个独立的参数,和相应的错误。所以为了纠正这个问题,我一直在尝试类似于:
$myHT = @{
From = 'me@x.com'
To = 'them@x.com'
SmtpServer = 'mail.x.com'
}
$myHT.Add("Attachments","$PSScriptRoot\x.pdf", "$PSScriptRoot\y.pdf")
Send-MailMessage @myHT
找不到驱动器。名称为“C”的驱动器不存在。
$myHT.Add("Attachments","`"$PSScriptRoot\x.pdf`", `"$PSScriptRoot\y.pdf`"")
不支持给定路径的格式。
我觉得我在这里犯了一个语法错误,但找不到任何关于正确方法的文档。
有没有人有过这个问题的经验,或许可以分享?
答案 0 :(得分:2)
.Add()
方法只接受 2 参数,而第二个参数传递的任何内容都将被分配 as-is 。
在您的情况下,您要分配数组,因此必须将该数组作为单第二个参数传递:
$myHT.Add("Attachments", ("$PSScriptRoot\x.pdf", "$PSScriptRoot\y.pdf"))
请注意PS数组(...)
周围的"$PSScriptRoot\x.pdf", "$PSScriptRoot\y.pdf"
,以确保它被识别为。{/ p>
虽然使用@(...)
也是一种选择,但通常不需要(并在幕后执行不必要的工作)。
或者,使用对哈希表的基于键的访问来添加元素可以使赋值更具可读性:
$myHT.Attachments = "$PSScriptRoot\x.pdf", "$PSScriptRoot\y.pdf"
# Equivalent
$myHT['Attachments'] = "$PSScriptRoot\x.pdf", "$PSScriptRoot\y.pdf"
答案 1 :(得分:1)
如果您在初始化哈希表之前已经知道要用于Attachments
的数组值,则可以使用更简单的解决方案:
$myHT = @{
From = 'me@x.com'
To = 'them@x.com'
SmtpServer = 'mail.x.com'
Attachments = "$PSScriptRoot\x.pdf", "$PSScriptRoot\y.pdf"
}
Send-MailMessage @myHT