将多字符串参数添加到用于Splatting的Hashtable

时间:2017-04-26 13:18:58

标签: powershell

我有这个主要工作。我试图在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`"")
  

不支持给定路径的格式。

我觉得我在这里犯了一个语法错误,但找不到任何关于正确方法的文档。

有没有人有过这个问题的经验,或许可以分享?

2 个答案:

答案 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