为什么不直接使用powershell中的命令工作?

Wal*_*ter 3 powershell splat

为什么以下工作:

Get-WmiObject -class Win32_OperatingSystem
Run Code Online (Sandbox Code Playgroud)

这也有效:

$params = @{class='Win32_OperatingSystem'}
Get-WmiObject @params
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

Get-WmiObject @{class='Win32_OperatingSystem'}
Run Code Online (Sandbox Code Playgroud)

错误:

Get-WmiObject : Invalid query "select * from System.Collections.Hashtable"
At line:1 char:1
+ Get-WmiObject @{class='Win32_OperatingSystem'}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (:) [Get-WmiObject], ManagementException
+ FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
Run Code Online (Sandbox Code Playgroud)

Sag*_*pre 6

Splatting是一种将参数值集合作为单元传递给命令的方法.Windows PowerShell将集合中的每个值与命令参数相关联.Splatted参数值存储在命名的splatting变量中,这些变量看起来像标准变量,但以At符号(@)而不是美元符号($)开头.At符号告诉Windows PowerShell您传递的是值集合,而不是单个值.

如果不将它存储到变量中,则它不是splatting,它是一个简单的哈希表,它作为位置参数传递给命令.

参考

关于喷溅