source

중첩된 Forach-Object 및 Where-Object의 변수

ittop 2023. 8. 20. 12:40
반응형

중첩된 Forach-Object 및 Where-Object의 변수

Powershell에서 중첩된 Forach-Object, Where-Object 및 기타 Cmdlet을 사용하는 방법이 궁금합니다.예를 들어 이 코드는 다음과 같습니다.

$obj1 | Foreach-Object { 
    $obj2 | Where-Object { $_ .... }
}

그래서 Foreach-Object의 코드 블록에서 나는 다음 요소들을 사용합니다.$obj1~하듯이$_그러나 Where-Object의 코드 블록에서도 동일한 현상이 발생합니다.$obj2그렇다면 Where-Object 코드 블록에서 두 객체 요소에 액세스하려면 어떻게 해야 합니까?해야 할 것 같습니다.$_.Arg1 -eq $_.Arg1하지만 이건 말이 안 돼요

FAIK, 로컬 변수에 추가하여 외부 루프에 대한 참조를 유지해야 합니다.

$obj1 | Foreach-Object { 
    $myobj1 = $_
    $obj2 | Where-Object { $_ .... }
}

이 문제를 해결하는 또 다른 방법은 각각 조금씩 다른 것입니다.

ForEach($item in $obj1){
    $obj | Where-Object{$_.arg -eq $item.arg}
}

여전히 약 _Scopes로 요약됩니다.$_는 항상 현재 범위에 대한 참조입니다.아셔야 할 것은($_.Arg1 -eq $_.Arg1)그냥 자기 자신을 지칭하는 것일 뿐입니다.

일치가 충분히 간단한 경우 내부 코드 블록을 제거하고 로컬 변수를 피할 수 있습니다.

$obj1 | Foreach-Object { 
    $obj2 | Where property -eq $_.property
}

예:

$array = ("zoom", "explorer", "notreal")
$array | foreach { get-process | where ProcessName -EQ $_ | Out-Host }

또한 오늘날 스코프를 사용할 수 있습니다. 예를 들어 내부의 각 스코프에 액세스할 수 있습니다.$_그리고 각각의 부모는 다음을 사용하여 자식 루프 내에서 액세스할 수 있습니다.$script:_

언급URL : https://stackoverflow.com/questions/26715634/variables-in-nested-foreach-object-and-where-object

반응형