Instrukcja PowerShell ForEach loop Tutorial z przykładami
ForEach
jest instrukcją PowerShell używaną do iteracji lub pętli nad podaną listą, tablicą lub kolekcją obiektów, łańcuchów znaków, liczb, itp. ForEach jest bardzo popularnym mechanizmem pętli, w którym możemy używać różnych przypadków, takich jak pętla przez pliki, liczby, ciągi, procesy itp. Powershell w wersji 4.0 wprowadza pewne ulepszenia wydajności w pętliForEach
.
składnia PowerShell ForEach
Instrukcja Foreach ma następującą składnię, w której używamyITEM
COLLECTION
ICODE-BLOCK
.
ForEach(ITEM in COLLECTION){ CODE BLOCK}
- ITEM to pojedyncza wartość lub obiekt, który zmienia się podczas każdej iteracji.
- kolekcja jest tablicą, kolekcją, listą wartości lub obiektami takimi jak 1,2,3,4.
- blok kodu jest blokiem, w którym działa prawdziwa operacja, która zazwyczaj używa elementu. Blok ten może być jedną lub wieloma liniami.
Foreach poprzez tablicę łańcuchów
w prosty sposób możemy iterować nad podaną listą tablicy łańcuchów. Iterację nad tablicą o nazwie „cities”, która zawiera wiele nazw miast. Wydrukujemy każdą nazwę miasta komendą „echo”, jak poniżej.
$cities = ("istanbul,ankara,canakkale")foreach ($city in $cities){ echo $city}
możemy sprawdź, czy każda nazwa miasta jest drukowana w terminalu PowerShell w jednej linii.
Foreach poprzez zbiór liczb
w poprzednim przykładzie zapętliliśmy daną listę łańcuchów. Możemy również iterować lub zapętlić listę liczb. Utworzymy tablicę o nazwie numbers
I nad każdą pozycją w tej tablicy liczbowej wykonamy iterację.
$numbers=(1,2,3,4,5)foreach ($number in $numbers){ echo $number}
$_ usage
podczas używania niektórych cmdletów do przekierowania wyjścia cmdleta do foreach możemy użyć „$” dla każdego elementu lub obiektu. Na przykład, jeśli użyjemy polecenia „Get-Process”, każdy element lub proces będzie przypisany do $
w każdej iteracji. Możemy określić atrybut jak nazwa $.Name
I wydrukować jak poniżej.
PS> Get-Process | ForEach-Object {$_.ProcessName}
We can also print multiple attributes in foreach by delimiting them with comma.
PS> Get-Process | ForEach-Object {$_.ProcessName, $_.ID}
Foreach Through Files
We can also loop through files by using Get-ChildItem
cmdlet. Get-ChildItem
wyświetli listę plików i folderów, takich jak dir
polecenie MSDOS. To wyjście zostanie zapisane w konsoli poleceniemEcho
.
foreach($file in Get-ChildItem) {Echo $file}
foreach poprzez konkretne rozszerzenia plików, takie jak Bat
, możemy wyszczególnić określone rozszerzenie. Rozszerzenie zazwyczaj zapewnia Typ pliku, taki jak tekst, avi, mkv, mp3, doc itp. W tym przykładzie podamy tylko *.bat
lub pliki Bat.
foreach($file in Get-ChildItem *.bat) {Echo $file}
widzimy, że tylko pliki takie jak test.bat
I autoexec.bat
będą wyświetlane.
Foreach nad plikiem CSV
pliki CSV służą do przechowywania danych tekstowych w sposób uporządkowany. Możemy łatwo foreach w każdej linii pliku CSV jak poniżej. W tym przykładzie odczytamy plik IP CSV i przekażemy do foreach
, aby wydrukować konsolę Powershell.
$IPs = (Get-Content IP.csv).split(",")foreach ( $IP in $IPs){ echo $IP}