A ForEach ciklus áttekintése és használata Windows PowerShell-szkriptekben

Befejezett

A csővezetékek végrehajtásakor a folyamat parancsai minden objektumra érvényesek lesznek. Bizonyos esetekben előfordulhat, hogy a ForEach-Object parancsmaggal kell feldolgoznia a folyamatban lévő adatokat. Amikor adatokat tárol egy tömbben, a ForEach-szerkezet lehetővé teszi a tömb egyes elemeinek feldolgozását.

A ForEach-szerkezet a következő szintaxist használja:

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

Az előző példában van egy tömb, $users amely Active Directory tartományi szolgáltatások (AD DS) felhasználói objektumokat tartalmaz. A ForEach szerkezet az egyes objektumok esetén egyszer dolgozza fel a kapcsos zárójelek között lévő Windows PowerShell-parancsokat. A parancsok feldolgozásakor az a változó, $user amely a tömb minden elemét tartalmazza. Az első iterációban a $user tartalmazza a $users[0] elemet, a második iterációban pedig a $user tartalmazza a $user[1] elemet. Ez mindaddig folytatódik, amíg a tömb összes elemét egyszer fel nem dolgozták.

A szkriptekben a ForEach-szerkezet a tömbbe helyezett elemek feldolgozásának leggyakoribb módja. Könnyen használható, mert nem kell tudnia a feldolgozandó elemek számát.

Az előző példában csak egy parancs található a kapcsos zárójelek között, de számos parancsot adhat hozzá, amelyeket minden ciklushoz feldolgozunk. A kapcsos zárójelek közötti parancsok behúzása a szkript könnyebb áttekinthetősége érdekében konvenció szerint történik. A behúzás nem technikai követelmény, de hasznos gyakorlat.

A ForEach hurok változóinak elnevezésének értelmesnek kell lennie. Az esetek többségében egyértelműen azonosítja a ciklusban használt változót a tömb egyetlen példányaként. Egy elnevezett $userstömb esetében például a ciklusban használt változó lehet $user. Megfigyelhet példákat olyan változókra, amelyek egyetlen betűvel megegyeznek a tömb kezdeti betűjével. Ezt azonban csak olyan egyszerű kódban szabad használni, amelyben könnyű megállapítani, hogy kapcsolatban állnak egymással.

Párhuzamos teljesítmény

A PowerShell 7-ben a -Parallel paraméter hozzá lett adva a ForEach-Object parancsmaghoz. Így a folyamat egyszerre több objektumot is feldolgozhat. Több objektum egyidejű feldolgozása jobb teljesítményt biztosíthat, mint egy szabványos ForEach-ciklus . Ezt érdemes megfontolnia, ha PowerShell 7-et használ. Az alábbi példa bemutatja, hogyan használható a ForEach-Object a -Parallel paraméterrel.

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

A -Parallel paraméter alapértelmezés szerint öt elem feldolgozását teszi lehetővé egyszerre. Ezt a -ThrottleLimit paraméterrel módosíthatja nagyobb vagy kisebb értékre.