我怎样才能得到相同的输出:
$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
我很确定你现在要做的事情至少在这个时候是不可能的。 Splatting特定于散列表和数组变量。不返回函数,方法等的值.Technet for splatting有点支持这个
Splatting是一种将参数值集合作为单元传递给命令的方法。 PowerShell将集合中的每个值与命令参数相关联。 Splatted参数值存储在命名的splatting变量中,这些变量看起来像标准变量,但以At符号(@)而不是美元符号($)开头。 At符号告诉PowerShell您传递的是值集合,而不是单个值。
使用@ outside将告诉PowerShell将结果视为数组。 IIRC有一个半相关的功能请求,可以直接从哈希表定义中进行splat,而不是先保存到变量。
关于从变量属性splatting的相关问题:Splatting a function with an object's property
使用哈希表传递函数参数与隐式指定它们的方式相同。 Hashtable键用作参数名称,其对应的哈希表值用作参数值。
Write-Host -Object 'Hi there' -Foregroundcolor 'Green'