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

时间:2018-10-05 23:00:26

标签: powershell hashtable static-methods

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

$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

2 个答案:

答案 0 :(得分:1)

我很确定,至少在目前,您要执行的操作是不可能的。散列特定于哈希表和数组变量。不返回函数,方法等的值。Technet for splatting对此提供支持

  

Splatting是一种将参数值的集合作为单位传递给命令的方法。 PowerShell将集合中的每个值与命令参数相关联。 展开的参数值存储在命名的展开变量中,该变量看起来像标准变量,但以At符号(@)代替美元符号($)开头。 At符号告诉PowerShell您正在传递值的集合,而不是单个值。

在其外部使用@将告诉PowerShell将结果视为数组。 IIRC有一个半相关的功能请求,可以直接从哈希表定义中进行splat,而不是先保存到变量。


有关从可变属性中进行飞溅的相关问题:Splatting a function with an object's property

答案 1 :(得分:-2)

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

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