2011-12-07 7 views
21

여러 도메인의 모든 도메인 관리자에 대해 몇 가지 검사를 수행하는 PowerShell 스크립트가 있습니다. 각 사용자 계정에 대해 여러 가지 검사가 수행됩니다. 그 중 하나가 실패하면 스크립트는 목록의 다음 관리자에게 가야합니다.ForEach-Object의 다음 항목으로 이동

Get-QADGroupMember "Domain Admins" | Select-Object SamAccountName | ForEach-Object { 

    #Do something 
    if(!ThisCheckIsOK) 
    { 
     break; 
    } 

    #Do something else 
    if(ThisCheckIsNotOK) 
    { 
     break; 
    } 

    ... 
} 

이 전체 스크립트를 중지 :

나는 현재이 같은 (간체)가 있습니다. 다음 요소로 갈 수있는 방법이 있습니까?

$foreach.movenext()$foreachnull이므로 작동하지 않습니다.

+0

아마도 더 나은 답변을 얻을 수 있습니까? – Smudge

+0

C++에서 foreach를 사용했다면 그렇습니다. 이제 Powershell cmdlet을 사용하고 있으며 분명히 sysadmin-stuff입니다. –

+0

사이에 어딘가에 있다고 생각하지만, 귀하의 질문은 일반적으로 Powershell (Powershell 루프의 다음 요소로 이동하는 방법)입니다. 세부 사항은 sys-admin과 관련되어 있지만. SF에 대해 ~ 500 Powershell 질문이 있다는 것을 감안할 때, 거의 4k가 있으므로저기서 질문에 답할 자격이있는 사람들이 아마있을 것입니다. 그것은 어쨌든 내 의견입니다.) – Smudge

답변

26

Continue 문을 사용하면 가장 안쪽의 루프를 계속 진행할 수 있습니다.

발췌 PowerShell 도움말 파일에서 :

  • for : 스크립트에서

    의는 continue 문은 이러한 진술의에 의해 제어 가장 안쪽의 루프의 상단으로 바로 이동하는 프로그램 흐름의 원인

  • foreach
  • while
+2

foreach-object는 foreach가 아니기 때문에 (그리고 statement가 아님), 이것은 잘못된 것입니다. – Steed

+6

전체 ForEach-Object 문을 종료합니다. 'Return'이 작동합니다 (즉, 다음 객체로 이동). – aucuparia

+0

$ foreach.MoveNext()를 계속 대신 사용할 수 있습니다. – Djarid

21

breakreturn 문으로 바꾸면됩니다.

익명의 기능으로 Foreach-Object 내부의 코드를 생각해보십시오. 함수 내부에 루프가있는 경우에는 구성 키워드 (continue, break, ...)를 적용하십시오.

+0

감사! 그것은 작동합니다! –

+1

이 특별한 경우에는 작동하지만 중첩 루프가있는 큰 스크립트에서는 제대로 작동하지 않을 수 있습니다. –

+2

foreach-object 내부의 코드를 익명의 함수로 생각하십시오. 함수 내부에 루프가 있다면, 컨트롤 키워드를 사용하여 건설에 적용하십시오. (계속, 중단, ...) –

관련 문제