2011-12-07 16 views
21

私はいくつかのドメインのすべてのDomain Adminsについていくつかのチェックを行うPowerShellスクリプトを持っています。 各ユーザーアカウントについて、多数のチェックが行われます。そのうちの1つが失敗すると、スクリプトはリストの次の管理者に送られます。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コマンドレットを使用していますが、明らかにsysadmin-stuffです。 –

+0

私はそれが間にどこかにあると思うが、あなたの質問は一般的にPowershell(Powershellのループの次の要素に進む方法)です。詳細はsys-admin関連です。 SFに関する500件のPowershell質問があることを考えれば、おそらくそこの質問に答える資格のある人がいるでしょう。とにかくそれは私の意見です。) – Smudge

答えて

26

Continueステートメントを使用して、最も内側のループを続行することができます。 PowerShellヘルプファイルから

抜粋:スクリプトで

は、continue文は、これらのステートメントのいずれかによって制御さ最内ループの先頭にすぐに移動するには、プログラムの流れが発生します。

  • for
  • foreach
  • while
+2

foreach-objectはforeachではなく(どちらも文でもないので)間違っています。 – Steed

+6

これは私のために 'ForEach-Object'文全体を終了します。 'Return'が動作します(つまり、次のオブジェクトに移動します)。 – aucuparia

+0

$ foreach.MoveNext()をcontinueの代わりに使用することができます – Djarid

21

breakreturnと置き換えてください。

Foreach-Objectのコードを匿名機能と考えてください。関数内にループがある場合は、構築に適用するコントロールキーワード(continuebreak、...)を使用してください。

+0

ありがとう!できます! –

+1

この特定の機会には動作しますが、ネストされたループを持つ大きなスクリプトではうまく動作しない可能性があります。 –

+2

foreach-object内のコードを無名関数と考えるだけです。関数内にループがある場合は、コントロールに適用するコントロールキーワードを使用してください(continue、break、...) –

関連する問題