如何获得与以下相同的输出:
$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
答案 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'