问题描述
所以这当然有效:
$Splat = @{
name = 'chrome'
fiLeversioninfo = $true
}
(Get-Process @Splat)[0]
对我来说,它返回:
ProductVersion FiLeversion FileName
-------------- ----------- --------
84.0.4147.125 84.0.4147.125 C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
现在,如果我将变量名更改为'Chrome File Path and Version',我会得到:
${ Chrome File Path and Version } = @{
name = 'chrome'
fiLeversioninfo = $true
}
该变量有效,并返回属性:
Name Value
---- -----
fiLeversioninfo True
name chrome
但是尝试对其进行喷射,它认为由于括号,我试图创建一个哈希表:
At line:5 char:23
+ (Get-Process @{ Chrome File Path and Version })[0]
+ ~
Missing '=' operator after key in hash literal.
所以我的问题是,有人知道一种方法来喷射需要在方括号内的变量吗? 我很清楚一个简单的
$splat = ${ Chrome File Path and Version }
可以,但是问题不是解决方法,即使有一种方法可以使用空格作为第一个字符来对变量进行喷溅。 我已经尝试过使用转义字符,单/双引号,子表达式和管道将名称放下,但是对此没有任何文档,我敢肯定它不被支持:/
另外,万一有问题,我仍使用5.1.19041.1版本
解决方法
Splatting是一种将参数值集合作为一个单元传递给命令的方法,它应该使您的命令更短,更易于阅读。
Ok PowerShell提供了一种在变量名称中使用特殊字符的方法,但是我认为这不是一个好习惯,应该知道它的存在,而不应该使用它。
一个很简单的事实,它使用布雷特(brickt)干扰了Splating中哈希表的初始化。因此,正如@Roman Kuzmin所建议的那样,它根本不受支持
,这就像您希望拥有这样的变量名:variable with space = 1;
用其他语言。 This is not supported