2017-09-09 6 views
3

이유는 다음과 같은 작업 않습니다왜 PowerShell에서 명령을 직접 표시하지 않습니까?

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 
+2

당신이 스플래하지만 위치 인수로'Hashtable' 전달되지 않기 때문에. 어떻게 스플래과 위치 매개 변수로 해시 테이블을 통과 구분 것 : – PetSerAl

+0

은 PowerShell을 개발자가 장소에 그 "바로 가기"로 – Walter

+3

을 간과 명백한 바로 가기 것 같아? –

답변

5

스플래 팅은 방법입니다 매개 변수 값의 모음을 하나의 명령으로 명령에 전달합니다. Windows PowerShell은 컬렉션의 각 값을 명령 매개 변수와 연결합니다. Splatted 매개 변수 값은 표준 변수처럼 이름 스플래 변수에 저장하지만,에서 기호 (@) 대신에 달러 기호 ($)로 시작된다. At 기호는 단일 값 대신 값의 컬렉션을 전달하고 있음을 Windows PowerShell에 알립니다. 당신이 변수에 보관하지 않는 경우

, 그것은 스플래하지, 그것은 명령으로 위치 인수로 전달되는 간단한 해시 테이블입니다.

참조

About splatting