檢閱和使用 Windows PowerShell 指令碼中的 ForEach 迴圈

已完成

當您執行管道時,管道中的命令會套用到每個物件上。 在某些情況下,您可能需要使用 ForEach-Object Cmdlet 來處理管線中的資料。 當您將資料儲存至陣列時,ForEach 建構可讓您處理陣列中的每個項目。

ForEach 建構會使用下列語法:

ForEach ($user in $users) {
     Set-ADUser $user -Department "Marketing"
}

在上述範例中,有一個名為 $users 的陣列,其中包含 Active Directory 網域服務 (AD DS) 使用者物件。 ForEach 建構會針對每個物件處理一次大括弧之間的 Windows PowerShell 命令。 處理命令時,$user 是包含陣列中每個項目的變數。 在第一個反覆項目上,$user 包含 $users[0],而在第二個反覆項目上,$user 包含 $user[1]。 這會繼續執行,直到陣列中的所有項目都已處理一次為止。

在指令碼中,ForEach 建構是處理您放入陣列之項目最常見的方式。 易於使用,因為您不需要知道要處理的項目數目。

上一個範例在大括弧之間只有一個命令,但您可以新增許多命令,這將會針對每個迴圈進行處理。 大括弧之間的命令縮排會依照慣例讓指令碼更容易檢閱。 縮排不是技術需求,但是很好的作法。

ForEach 迴圈中的變數命名應具有意義。 在大多數情況下,您會清楚識別出用於迴圈的變數,其實是陣列的一個單一元素。 例如,針對名為 $users 的陣列,迴圈中使用的變數可以是 $user。 您可能會注意到變數有單一字母與陣列的首字母相同的範例。 不過,這應該只用於簡單的程式碼中,以便判斷它們是否相關。

平行效能

在 PowerShell 7 中,-Parallel 參數已新增至 ForEach-Object Cmdlet。 這可讓管線同時處理多個物件。 同時處理多個物件可提供比標準 ForEach 迴圈更好的效能。 如果您使用 PowerShell 7,則應該考慮這一點。 下列範例說明如何使用 ForEach-Object 搭配 -Parallel 參數。

$users | ForEach-Object -Parallel { Set-ADUser $user -Department "Marketing" }

根據預設,-Parallel 參數允許一次處理五個項目。 您可使用 -ThrottleLimit 參數,將此值修改為更大或更小。