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

时间:2017-09-09 20:58:14

标签: powershell splat

为什么以下工作:

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

1 个答案:

答案 0 :(得分:5)

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

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

<强>参考

About splatting