如何直接从类静态方法拼接哈希表?



如何获得与以下相同的输出:

$ht = @{Object="Hi there";Foregroundcolor="Green"}
Write-Host @ht

不使用变量$ht

不要误会我的意思,我知道如何使用基本的CMDLet。 我有一个生成动态哈希表的静态方法。 请看这个简化的示例代码:

class HashtableGenerator
{
static [hashtable]Answer()
{
return @{Object="Hallo Welt";ForegroundColor="Green"}
}
}
$ht = [HashtableGenerator]::Answer()
Write-Host @ht

这工作得很好,但是是否可以摆脱$ht变量,因此代码如下所示:

Write-Host @([HashtableGenerator]::Answer()) # Doesn't work

我很确定你至少在这个时候想要做的事情是不可能的。拼接显式地特定于哈希表和数组变量。不返回函数、方法等的值。用于喷塑的 Technet 支持这一点

拼接是一种将参数值集合作为单元传递给命令的方法。PowerShell 将集合中的每个值与命令参数相关联。拼接参数值存储在命名拼接变量中,这些变量看起来像标准变量,但以 At 符号 (@( 而不是美元符号 ($( 开头。At 符号告知 PowerShell 你正在传递值集合,而不是单个值。

使用外部的 @ 将告诉 PowerShell 将结果视为数组。IIRC 有一个半相关的特征请求,直接从哈希表定义中拼接,而不是先保存到变量。


讨论从变量属性拼接的相关问题:使用对象的属性拼接函数

使用哈希表传递函数参数的方式与隐式指定它们的方式相同。哈希表键用作参数名称,其相应的哈希表值用作参数值。

Write-Host -Object 'Hi there' -Foregroundcolor 'Green'

最新更新