![powershell 파이프라인 개체가 작동하도록](https://rvso.com/image/658758/powershell%20%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8%20%EA%B0%9C%EC%B2%B4%EA%B0%80%20%EC%9E%91%EB%8F%99%ED%95%98%EB%8F%84%EB%A1%9D.png)
내가하려는 일에 대한 스텁은 다음과 같습니다.
function Set-test {
[CmdletBinding()]
param(
[Parameter(Mandatory=$True,
ValueFromPipeline=$True)]
[object[]]$inputObject
)
Write-Verbose "Set-test: input obj= $inputObject"
PROCESS {
foreach ($obj in $inputobject) {
Write-Output $obj
}
}
}
function Get-test {
$obj = New-Object PSObject
$obj | Add-Member -MemberType NoteProperty -Name "swName" -Value "banana"
$obj | Add-Member -MemberType NoteProperty -Name "Version" -Value "3.2.2"
Write-Output "obj = $obj"
$obj | Set-test -verbose
}
출력은 다음과 같습니다.
PS > Get-test
obj = @{swName=banana; Version=3.2.2}
VERBOSE: Set-test: input obj=
Get-Process : Cannot evaluate parameter 'Name' because its argument is specified as a script block and there is no input. A script block cannot be evaluated without input.
At C:\Users\username\Documents\WindowsPowerShell\Modules\mytool\mytools.psm1:204 char:13
+ PROCESS {
+ ~
+ CategoryInfo : MetadataError: (:) [Get-Process], ParameterBindingException
+ FullyQualifiedErrorId : ScriptBlockArgumentNoInput,Microsoft.PowerShell.Commands.GetProcessCommand
자세한 출력에서 볼 수 있듯이 개체가 함수로 파이프되지 않는 것으로 나타나 당황스럽습니다.
답변1
start{}, process{} 또는 end{} 블록 외부의 set-test에서는 자세한 쓰기 기능을 사용할 수 없습니다. 일을 엉망으로 만들고 있어요. 프로세스 블록 내부로 옮기면{} 잘 작동합니다.