有没有办法生成一个哈希表,使用哈希表中刚刚定义的属性来创建下一个属性?我知道我可以逐行进行操作,但我想保留当前的格式,因为我喜欢它的阅读方式。
$RequestedSpace = @{}
$RequestedSpace.Clear()
$RequestedSpace = @{
Gb = (Read-Host "How much space (in Gb) would you like left over?")
b = $RequestedSpace.Gb * 1Gb
};
$RequestedSpace.Gb
$RequestedSpace.b
上述结果导致 $RequestedSpace.b 为空值
下面的方法有效,但在我看来明显丑陋
$RequestedSpace = @{}
$RequestedSpace.Clear()
$RequestedSpace.Gb = Read-Host "How much space (in Gb) would you like left over?"
$RequestedSpace.b = [bigint]$RequestedSpace.Gb * 1gb
您可以利用以下事实:
您可以定义一个 辅助变量,并将赋值作为 表达式,方法是将其括在
(...)
(即 分组运算符)中,该运算符将分配的值传递给
条目按顺序定义,因此后续条目可以引用 aux。之前定义的变量。
@{
# Note the *definition* of aux. variable $gb
Gb = ($gb = [double] (Read-Host "How much space (in Gb) would you like left over?"))
# Note the *use* of $gb
b = $gb * 1Gb
}
假设您在出现提示时输入
2
,您将得到以下显示输出:
Name Value
---- -----
Gb 2
b 2147483648
注:
该技术适用于 hashtable 文字,如上所示 (
@{ ... }
),以及 [pscustomobject]
文字 ([pscustomobject] @{ ... }
)。
GitHub 建议 #13782 寻找一种内置方式来允许哈希表条目相互引用。