다음을 통해 공유


스플래팅 정보

간단한 설명

스플래팅을 사용하여 PowerShell의 명령에 매개 변수를 전달하는 방법을 설명합니다.

자세한 설명

[이 주제는 시스템 관리자이자 2012 스크립팅 게임 고급 부문의 우승자인 미시시피 걸프포트의 Rohn Edwards에 의해 기여되었습니다. Windows PowerShell 3.0에 대해 수정되었습니다.]

Splatting은 매개 변수 값 컬렉션을 단위로 명령에 전달하는 방법입니다. PowerShell은 컬렉션의 각 값을 명령 매개 변수와 연결합니다. 스플래팅된 매개 변수 값은 표준 변수처럼 보이지만 달러 기호($) 대신 At 기호(@)로 시작하는 명명된 스플래팅 변수에 저장됩니다. At 기호는 단일 값 대신 값 컬렉션을 전달한다는 것을 PowerShell에 알려줍니다.

스플래팅을 사용하면 명령을 더 짧고 쉽게 읽을 수 있습니다. 다른 명령 호출에서 스플래팅 값을 다시 사용하고 스플래팅을 사용하여 자동 변수의 $PSBoundParameters 매개 변수 값을 다른 스크립트 및 함수로 전달할 수 있습니다.

Windows PowerShell 3.0부터 스플래팅을 사용하여 명령의 모든 매개 변수를 나타낼 수도 있습니다.

SYNTAX

<CommandName> <optional parameters> @<HashTable> <optional parameters>
<CommandName> <optional parameters> @<Array> <optional parameters>

매개 변수 이름이 필요하지 않은 위치 매개 변수에 대한 매개 변수 값을 제공하려면 배열 구문을 사용합니다. 매개 변수 이름 및 값 쌍을 제공하려면 해시 테이블 구문을 사용합니다. 스플래트된 값은 매개 변수 목록의 아무 곳에나 나타날 수 있습니다.

스플래팅할 때 해시 테이블 또는 배열을 사용하여 모든 매개 변수를 전달할 필요가 없습니다. 스플래팅을 사용하여 일부 매개 변수를 전달하고 위치 또는 매개 변수 이름으로 다른 매개 변수를 전달할 수 있습니다. 또한 각 매개 변수에 대해 둘 이상의 값을 전달하지 않도록 단일 명령으로 여러 개체를 배치할 수 있습니다.

해시 테이블로 스플래팅

해시 테이블을 사용하여 매개 변수 이름 및 값 쌍을 스플랫합니다. 위치 및 스위치 매개 변수를 포함하여 모든 매개 변수 형식에 이 형식을 사용할 수 있습니다. 위치 매개 변수는 이름으로 할당해야 합니다.

다음 예제에서는 동일한 디렉터리의 Test2.txt 파일에 Test.txt 파일을 복사하는 두 Copy-Item 명령을 비교합니다.

첫 번째 예제에서는 매개 변수 이름이 포함된 기존 형식을 사용합니다.

Copy-Item -Path "test.txt" -Destination "test2.txt" -WhatIf

두 번째 예제에서는 해시 테이블 스플래팅을 사용합니다. 첫 번째 명령은 매개 변수 이름 및 매개 변수-값 쌍의 해시 테이블을 만들고 변수에 $HashArguments 저장합니다. 두 번째 명령은 스플래팅이 있는 명령의 변수를 사용합니다 $HashArguments . At 기호(@HashArguments)는 명령의 달러 기호($HashArguments)를 대체합니다.

WhatIf 스위치 매개 변수에 대한 값을 제공하려면 또는 $False을 사용합니다$True.

$HashArguments = @{
  Path = "test.txt"
  Destination = "test2.txt"
  WhatIf = $true
}
Copy-Item @HashArguments

참고: 첫 번째 명령에서 At 기호(@)는 스플래트된 값이 아닌 해시 테이블을 나타냅니다. PowerShell의 해시 테이블에 대한 구문은 다음과 같습니다. @{\<name\>=\<value\>; \<name\>=\<value\>; ...}*

배열로 스플래팅

배열을 사용하여 매개 변수 이름이 필요하지 않은 위치 매개 변수의 값을 스플랫합니다. 값은 배열의 위치 번호 순서여야 합니다.

다음 예제에서는 동일한 디렉터리의 Test2.txt 파일에 Test.txt 파일을 복사하는 두 Copy-Item 명령을 비교합니다.

첫 번째 예제에서는 매개 변수 이름을 생략하는 기존 형식을 사용합니다. 매개 변수 값은 명령의 위치 순서로 표시됩니다.

Copy-Item "test.txt" "test2.txt" -WhatIf

두 번째 예제에서는 배열 스플래팅을 사용합니다. 첫 번째 명령은 매개 변수 값의 배열을 만들고 변수에 $ArrayArguments 저장합니다. 값은 배열의 위치 순서에 있습니다. 두 번째 명령은 스플래팅에서 명령의 변수를 사용합니다 $ArrayArguments . At 기호(@ArrayArguments)는 명령의 달러 기호($ArrayArguments)를 대체합니다.

$ArrayArguments = "test.txt", "test2.txt"
Copy-Item @ArrayArguments -WhatIf

예제

이 예제에서는 다른 명령에서 스플래트된 값을 다시 사용하는 방법을 보여 줍니다. 이 예제의 명령은 cmdlet을 Write-Host 사용하여 호스트 프로그램 콘솔에 메시지를 씁니다. 스플래팅을 사용하여 전경색과 배경색을 지정합니다.

모든 명령의 색을 변경하려면 변수 값을 변경하기 $Colors 만 하면 됩니다.

첫 번째 명령은 매개 변수 이름 및 값의 해시 테이블을 만들고 해시 테이블을 변수에 $Colors 저장합니다.

$Colors = @{ForegroundColor = "black"; BackgroundColor = "white"}

두 번째 및 세 번째 명령은 명령에서 $Colors 스플래팅에 변수를 Write-Host 사용합니다. 를 $Colors variable사용하려면 달러 기호($Colors)를 At 기호(@Colors)로 바꿉니다.

#Write a message with the colors in $Colors
Write-Host "This is a test." @Colors

#Write second message with same colors. The position of splatted
#hash table does not matter.
Write-Host @Colors "This is another test."

이 예제에서는 스플래팅 및 $PSBoundParameters 자동 변수를 사용하여 매개 변수를 다른 명령으로 전달하는 방법을 보여 줍니다.

$PSBoundParameters 자동 변수는 스크립트 또는 함수를 실행할 때 사용되는 모든 매개 변수 이름과 값을 포함하는 사전 개체(System.Collections.Generic.Dictionary)입니다.

다음 예제에서는 변수를 $PSBoundParameters 사용하여 함수에서 Test2 함수 Test1 로 스크립트 또는 함수에 전달된 매개 변수 값을 전달합니다. 두 호출 모두 스플래팅을 사용하여 함수를 Test2 호출 Test1 합니다.

function Test1
{
    param($a, $b, $c)

    $a
    $b
    $c
}

function Test2
{
    param($a, $b, $c)

    #Call the Test1 function with $a, $b, and $c.
    Test1 @PsBoundParameters

    #Call the Test1 function with $b and $c, but not with $a
    $LimitedParameters = $PSBoundParameters
    $LimitedParameters.Remove("a") | Out-Null
    Test1 @LimitedParameters
}
Test2 -a 1 -b 2 -c 3
1
2
3
2
3

SPLATTING 명령 매개 변수

스플래팅을 사용하여 명령의 매개 변수를 나타낼 수 있습니다. 이 기술은 프록시 함수, 즉 다른 명령을 호출하는 함수를 만들 때 유용합니다. 이 기능은 Windows PowerShell 3.0에서 도입되었습니다.

명령의 매개 변수를 스플래트하려면 를 사용하여 @Args 명령 매개 변수를 나타냅니다. 이 기술은 명령 매개 변수를 열거하는 것보다 쉽고 호출된 명령의 매개 변수가 변경되더라도 수정 없이 작동합니다.

이 기능은 할당되지 않은 모든 매개 변수 값을 포함하는 자동 변수를 사용합니다 $Args .

예를 들어 다음 함수는 cmdlet을 Get-Process 호출합니다. 이 함수에서 는 @Args cmdlet의 모든 매개 변수를 Get-Process 나타냅니다.

function Get-MyProcess { Get-Process @Args }

함수를 Get-MyProcess 사용하면 다음 명령과 같이 할당되지 않은 모든 매개 변수 및 매개 변수 값이 에 @Args전달됩니다.

Get-MyProcess -Name PowerShell
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    463      46   225484     237196   719    15.86   3228 powershell
Get-MyProcess -Name PowerShell_Ise -FileVersionInfo
ProductVersion   FileVersion      FileName
--------------   -----------      --------
6.2.9200.16384   6.2.9200.1638... C:\Windows\system32\WindowsPowerShell\...

매개 변수를 명시적으로 선언한 함수에서 를 사용할 @Args 수 있습니다. 함수에서 두 번 이상 사용할 수 있지만 입력하는 모든 매개 변수는 다음 예제와 같이 의 @Args모든 인스턴스에 전달됩니다.

function Get-MyCommand
{
    Param ([switch]$P, [switch]$C)
    if ($P) { Get-Process @Args }
    if ($C) { Get-Command @Args }
}

Get-MyCommand -P -C -Name PowerShell
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
408      28    75568      83176   620     1.33   1692 powershell

Path               : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.e
Extension          : .exe
Definition         : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.e
Visibility         : Public
OutputType         : {System.String}
Name               : powershell.exe
CommandType        : Application
ModuleName         :
Module             :
RemotingCapability : PowerShell
Parameters         :
ParameterSets      :
HelpUri            :
FileVersionInfo    : File:             C:\Windows\System32\WindowsPowerShell
                     \v1.0\powershell.exe
                     InternalName:     POWERSHELL
                     OriginalFilename: PowerShell.EXE.MUI
                     FileVersion:      10.0.14393.0 (rs1_release.160715-1616
                     FileDescription:  Windows PowerShell
                     Product:          Microsoft Windows Operating System
                     ProductVersion:   10.0.14393.0
                     Debug:            False
                     Patched:          False
                     PreRelease:       False
                     PrivateBuild:     False
                     SpecialBuild:     False
                     Language:         English (United States)

참고

PowerShell Desired State Configuration(DSC)는 스플래팅을 사용하도록 설계되지 않았습니다. 스플래팅을 사용하여 DSC 리소스에 값을 전달할 수 없습니다. 자세한 내용은 가엘 콜라스의 의사 스플래팅 DSC 리소스 문서를 참조하세요.

참고 항목

about_Arrays

about_Automatic_Variables

about_Hash_Tables

about_Parameters