2

有没有办法继续使用以空格开头的名称并将其吐出?

所以这当然有效:

$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 文件路径和版本”,我会得到:

${ 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

4

3 回答 3

2

喷溅是一种将参数值集合作为一个单元传递给命令的方法,它应该使您的命令更短且更易于阅读

好的 PowerShell 提供了一种在变量名中使用特殊字符的方法,但我认为这不是一个好习惯,你应该知道它存在,你不应该使用它。

它使用刹车的简单事实干扰了散列表的初始化。因此,正如@Roman Kuzmin 建议的那样,它根本不受支持

于 2020-08-17T07:01:01.920 回答
0

除了这个想法的可怕之处,PowerShell 中的 splatting 目前非常有限,所以中间变量是最好的方法。有一个 RFC 草案可以改进这里的 splatting ,但目前还没有计划实施。

于 2020-08-17T10:08:26.780 回答
0

这就像你希望有一个这样的变量名:variable with space = 1;在其他语言中。 This is not supported

于 2020-08-17T07:00:28.843 回答