2011-12-07 49 views
21

我有一個PowerShell腳本,可以在一些域中的所有Domain Admin上執行一些檢查。 對於每個用戶帳戶,都會執行一些檢查。當其中一個失敗時,腳本應該轉到列表中的下一個管理員。轉至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

也許你可能會在SO上得到更好的答案? – Smudge

+0

如果它本來是C++的foreach,那麼是的。現在我使用的是Powershell cmdlet,它顯然是sysadmin-stuff。 –

+0

我認爲它介於兩者之間,但是您的問題一般是Powershell(如何前進到Powershell循環中的下一個元素),即使具體是與系統管理員相關的。只要考慮到SF上有500個PowerShell問題,並且有近4k個問題,那麼可能有些人更有資格在那邊回答這個問題。這是我的意見無論如何=) – Smudge

回答

26

您可能想要使用Continue語句來繼續最內層的循環。

PowerShell幫助文件摘錄:

在腳本中,continue語句使程序流立即移動到最裏面的循環的任何這些語句的控制上:

  • for
  • foreach
  • while
+2

Foreach對象不是foreach(也不是一個語句),所以這只是錯誤的。 – Steed

+6

這爲我退出了整個'ForEach-Object'語句。 「返回」工作(即轉到下一個對象)。 – aucuparia

+0

$ foreach.MoveNext()可用於代替繼續 – Djarid

21

您只需將break替換爲return聲明。

Foreach-Object中的代碼視爲匿名函數。如果您在功能中有循環,只需使用適用於建築的控制關鍵字(continue,break,...)。

+0

謝謝!有用! –

+1

將適用於此特定場合,但可能不適用於嵌套循環的較大腳本。 –

+2

只需將foreach對象內的代碼視爲匿名函數即可。如果你在函數中有循環,只需使用適用於構造的控制關鍵字(繼續,打破,...) –