为什么以下工作:
Get-WmiObject -class Win32_OperatingSystem
这也有效:
$params = @{class='Win32_OperatingSystem'}
Get-WmiObject @params
但这不起作用:
Get-WmiObject @{class='Win32_OperatingSystem'}
ERROR:
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
答案 0 :(得分:5)
Splatting是一种将参数值集合作为单元传递给命令的方法。 Windows PowerShell将集合中的每个值与命令参数相关联。 Splatted参数值存储在命名的splatting变量中,这些变量看起来像标准变量,但以At符号(@)而不是美元符号($)开头。 At符号告诉Windows PowerShell您传递的是值集合,而不是单个值。
如果你没有将它存储到一个变量中,它就不是splatting,它是一个简单的哈希表,它作为位置参数传递给命令。
<强>参考强>