PowerShell 파이프라인이 어떻게 작동하는지, 내장 cmdlet이 데이터를 한 명령에서 다른 명령으로 어떻게 전달하는지 탐색했을 수 있습니다. 하지만 파이프라인을 사용하는 자신만의 사용자 정의 함수를 만들 수 있다는 것을 알고 계셨나요? 맞습니다! 매개변수 바인딩을 사용하면, 여러분의 함수는 내장 cmdlet처럼 작동하여 파이프라인에서 데이터를 원활하게 수용할 수 있습니다.
이 튜토리얼은 여러분의 사용자 정의 함수에 파이프라인의 힘을 부여하여 PowerShell 스크립트를 자동화하고 구조화하는 방식을 변화시키는 방법을 안내합니다.
루프나 수동 입력에 의존하기보다는 스크립팅의 새로운 효율성과 유연성을 열어보세요!
ValueFromPipeline
으로 파이프라인 입력 활성화하기
여러분의 함수가 파이프라인으로부터 정보를 받으려면 하나 이상의 매개변수를 설정하여 이를 수용해야 합니다. ValueFromPipeline
또는 ValueFromPipelineByPropertyName
속성을 사용하도록 매개변수를 설정할 것입니다.
루프를 사용하지 않고 여러 컴퓨터에 소프트웨어를 설치하는 함수를 설정하여 컴퓨터 이름의 배열을 전달하는 것부터 시작해 보겠습니다.
각 들어오는 파이프라인 객체가 ComputerName
매개변수로 처리될 수 있도록 ComputerName
매개변수에 ValueFromPipeline
속성을 추가하세요.
이 설정으로 PowerShell은 각 들어오는 파이프라인 객체를 $ComputerName
에 바인딩합니다.
function Install-Software { param( [Parameter(Mandatory)] [ValidateSet(1,2)] [int]$Version, [Parameter(Mandatory, ValueFromPipeline)] [string]$ComputerName ) process { Write-Host "I installed software version $Version on $ComputerName. Yippee!" } }
이제 파이프라인을 사용하여 함수에 컴퓨터 이름의 배열을 전달하세요.
$computers = @("SRV1", "SRV2", "SRV3") $computers | Install-Software -Version 1
process
블록이 없으면 함수는 마지막 항목만 처리합니다. process
블록은 함수가 배열의 각 항목을 독립적으로 처리할 수 있도록 합니다.
속성 이름으로 바인딩하기 ValueFromPipelineByPropertyName
아마도 파이프라인 객체에 함수의 매개변수와 일치해야 하는 여러 속성이 있을 것입니다. 그렇다면 CSV 파일에 ComputerName
및 Version
필드가 포함되어 있다고 가정해 보겠습니다.
속성 이름으로 바인딩을 시연하기 위해 이러한 속성이 포함된 CSV 파일을 저장하는 것으로 시작합니다:
@( [pscustomobject]@{'ComputerName' = 'SRV1'; 'Version' = 1} [pscustomobject]@{'ComputerName' = 'SRV2'; 'Version' = 2} [pscustomobject]@{'ComputerName' = 'SRV3'; 'Version' = 2} ) | Export-Csv -Path C:\Scripts\software_installs.csv -NoTypeInformation
함수를 업데이트하여 속성 이름으로 Version
및 ComputerName
을 수용하도록 합니다.
ValueFromPipelineByPropertyName
을 사용하면 함수의 매개변수와 각각의 객체(예: CSV에서 가져온 객체)의 속성이 일치하도록 합니다.
function Install-Software { param( [Parameter(Mandatory, ValueFromPipelineByPropertyName)] [ValidateSet(1,2)] [int]$Version, [Parameter(Mandatory, ValueFromPipelineByPropertyName)] [string]$ComputerName ) process { Write-Host "I installed software version $Version on $ComputerName. Yippee!" } }
이제 Import-Csv
를 사용하여 파일을 가져오고 각 객체를 Install-Software
에 파이프합니다.
Import-Csv -Path C:\Scripts\software_installs.csv | Install-Software
각 행의 ComputerName
및 Version
필드는 함수의 해당 매개변수에 바인딩됩니다. 이 접근 방식은 여러 컴퓨터에서 소프트웨어 설치를 쉽게 대량 처리할 수 있게 하며, 버전 관리를 가능하게 합니다.
결론
이 튜토리얼에서는 PowerShell 함수에서 파이프라인 지원을 활성화하는 방법을 배웠습니다. 이를 통해 함수를 더 다재다능하고 강력하게 만들 수 있습니다. 이제 내장 cmdlet과 유사하게 데이터를 매끄럽게 파이프라인에서 수용하는 사용자 정의 함수를 설계할 수 있습니다.
파이프라인 지원 함수를 사용하면 데이터 입력을 더 세밀하게 제어할 수 있어 스크립트 설계를 간소화하고 가독성을 향상시킬 수 있습니다.
PowerShell을 계속 사용하면서 효율적이고 파이프라인 준비가 된 함수를 작성하기 위해 이러한 기술을 통합하는 것을 고려해보세요. 스크립트를 더 적응 가능하고 작업 자동화를 더욱 효과적으로 만드세요!
Source:
https://adamtheautomator.com/powershell-pipeline-parameters/