중첩된 파이프라인에서 상위 수준 $_ 파이프라인 변수에 액세스하려면 어떻게 해야 합니까?
상위 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
'programing' 카테고리의 다른 글
자바스크립트에서 콜백 함수에 대해 더 잘 이해하기 (0) | 2023.10.04 |
---|---|
정적 라이브러리에서 __attribute__((구성자))가 작동하지 않는 이유는 무엇입니까? (0) | 2023.10.04 |
관계형 데이터베이스 대신 문서 기반 데이터베이스를 사용해야 하는 이유는 무엇입니까? (0) | 2023.10.04 |
컴파일된 TypeScript의 출력 폴더 (0) | 2023.10.04 |
모바일 보기에서 맨 위에 부트스트랩 오른쪽 열 (0) | 2023.10.04 |