programing

중첩된 파이프라인에서 상위 수준 $_ 파이프라인 변수에 액세스하려면 어떻게 해야 합니까?

bestprogram 2023. 10. 4. 22:15

중첩된 파이프라인에서 상위 수준 $_ 파이프라인 변수에 액세스하려면 어떻게 해야 합니까?

상위 VHD 파일의 디렉토리를 보고 어떤 VM이 해당 상위 VHD를 사용하고 있는지 평가하는 스크립트를 작성하고 있습니다.

메커니즘이 작동하지만 중첩된 파이프라인의 컨텍스트에서 자동 파이프라인 변수($_)를 참조해야 하는 문제가 발생했습니다.

sudo 코드는 다음과 같습니다.

For each File in Files
Iterate over all VMs that have differencing disks
and return all the VMs that have a disk whose parent disk is File

이를 위해 지금까지 구현한 실제 파워셸 코드는 다음과 같습니다.

$NAVParentFiles = get-childitem '\\hypervc2n2\c$\ClusterStorage\Volume1\ParentVHDs' | where {$_.Name -notLike "*diff*"} | select name
$NAVParentFiles | % { Get-VM | where {$_.VirtualHardDisks | where {$_.VHDType -eq "Differencing" -and ($_.ParentDisk.Location | split-path -leaf) -like <$_ from the outer for each loop goes here> } } 

중첩된 파이프라인에서 외부 파이프라인 변수에 원활하게 접근하는 방법에 대한 도움을 주셔서 감사합니다.

지정할 수 있습니다.$_변수에 적용하고 이를 사용합니다.

 1..10 | %{ $a = $_; 1..10 | %{ write-host $a} }

어쨌든 대본 리팩터링을 고려해 보세요.너무 중첩되어 있습니다.가독성에 집중합니다.항상 파이프링이 필요한 것은 아닙니다. 당신은 a를 사용할 수 있습니다.foreach그것이 가독성을 향상시키는데 도움이 된다면 루프.

그 명령어는 없지만, 어쩌면 -pipeline 변수 공통 파라미터가 여기서 사용될 수 있을지도 모릅니다.

Get-VM -PipelineVariable vm | Get-VHD |
  Select-Object @{n='Name'; e={$vm.name}}, path, parentpath 

언급URL : https://stackoverflow.com/questions/8237251/how-can-i-access-a-higher-level-pipeline-variable-from-a-nested-pipeline