W języku skryptowym Microsoft PowerShell, cmdlety służą do wykonywania trzech operacji: zbierania informacji, ustawiania informacji i usuwania informacji. Oprócz cmdletów, PowerShell zapewnia również możliwość przetwarzania informacji więcej niż jeden raz. Istnieją dwie wbudowane funkcje PowerShell, z których korzysta większość administratorów PowerShell. Są to ForEach Loop oraz ForEach-Object. Pętla PowerShell ForEach umożliwia iterację przez zestaw elementów zebranych w zmiennej PowerShell. Na przykład, używając cmdleta Get-ADUser PowerShell możemy zebrać informacje o użytkownikach z Active Directory. Jeśli potrzebujesz spojrzeć na właściwości miejskie każdego użytkownika przed podjęciem akcji, możesz użyć pętli ForEach. Pętla ForEach-Object może być użyta do bezpośredniej pracy z obiektami i najczęściej jest używana w potoku, jak to wyjaśnimy w tym artykule. Przyjrzyjmy się kilku przykładom, w których funkcje ForEach Loop i ForEach-Object są używane.
PowerShell ForEach Loop
Naszym pierwszym przykładem użycia ForEach Loop jest sprawdzenie właściwości city użytkowników Active Directory, a następnie podjęcie akcji. Załóżmy, że chcemy wyeksportować użytkowników, których właściwość city jest ustawiona na „London”, a następnie zapisać wynik w pliku CSV. Poniżej znajduje się skrypt PowerShell:
Jak widać w powyższym skrypcie, utworzyliśmy zmienną o nazwie $CityReport, która przechowuje ścieżkę do pliku CSV, w którym zostanie zapisany raport. Następnie zbieramy wszystkich użytkowników z danej jednostki organizacyjnej i zapisujemy zebranych użytkowników wraz ze wszystkimi właściwościami w zmiennej $AllUsersNow. Następnie rozpoczynamy przetwarzanie pętli ForEach Loop. W funkcji ForEach Loop sprawdzamy właściwość city użytkownika, a następnie za pomocą warunku IF sprawdzamy, czy właściwość city posiada wartość „London” czy nie dla aktualnego użytkownika. Jeśli użytkownik posiada „Londyn” jako wartość we właściwości miasta, bieżące wartości nazwy użytkownika i nazwy miasta są dodawane do pliku C:emp CityReport.CSV.
Innym przykładem użycia funkcji ForEach Loop jest przetwarzanie informacji przechowywanych w pliku CSV. Załóżmy, że masz plik CSV, który przechowuje wartości nazwy użytkownika, miasta i działu. Chcesz zmodyfikować właściwości miasta i departamentu użytkownika z pliku CSV. Aby to zrobić, użyjesz poniższego skryptu PowerShell:
Jak widać w powyższym skrypcie, zaimportowaliśmy zawartość pliku CSV do zmiennej $CSVFile, a następnie używając pętli ForEach zapisujemy wartości departamentu i miasta z pliku CSV do zmiennych $NewDepartment i $NewCity, a następnie używając cmdleta Set-ADUser PowerShell aktualizujemy wartości departamentu i miasta dla użytkownika.
W skrócie, użyj funkcji PowerShell ForEach Loop, gdy potrzebujesz przetworzyć informacje więcej niż raz, gdy potrzebujesz podjąć akcję na konkretnym elemencie w oparciu o wartość właściwości elementu, i/lub gdy potrzebujesz zmodyfikować informacje o obiekcie z pliku.
Oprócz funkcji ForEach Loop, PowerShell oferuje również ForEach-Object. ForEach-Object, jak sama nazwa wskazuje, pracuje bezpośrednio z obiektami i jest najczęściej używany w potoku. Na przykład, jak widać w poniższym poleceniu, cmdlet Get-Process pobiera wszystkie procesy na lokalnym komputerze, a ForEach-Object po potoku (|) przetwarza obiekty (nazwy procesów), a następnie po prostu wyświetla nazwę procesu w oknie wyjściowym.
Get-Process | ForEach-Object {$_.ProcessName}
Podobnie, jeśli chciałbyś zobaczyć nazwę procesu wraz z jego ID, wykonasz następującą komendę:
Get-Process | ForEach-Object {$_.ProcessName, $_.ID}
Innym przykładem użycia ForEach-Object jest uzyskanie długości wszystkich plików w katalogu. Załóżmy, że chciałbyś sprawdzić długość wszystkich plików w katalogu C:™Temp. Wykonasz następujące polecenia:
$ThisDir = „C:\Temp”
Get-ChildItem $ThisDir | ForEach-Object -Process {if (!$_.PSIsContainer) {$_.Name; $_.Length / 1024; ” ” }}
W poniższym przykładzie ForEach-Object PowerShell zbiera zdarzenia z dziennika zdarzeń aplikacji, a następnie zapisuje wiadomość o zdarzeniu w pliku tekstowym.
Take it from here
Więc teraz masz już pomysł, jak używać wbudowanych funkcji PowerShell ForEach i ForEach-Object. Pętla PowerShell ForEach może być użyta do iteracji przez zestaw elementów zebranych w zmiennej PowerShell i przechowywanych w pliku CSV. Funkcja ForEach-Object może być użyta do bezpośredniej pracy z obiektami. Przykłady, które przedstawiliśmy w tym artykule, wykorzystujące zarówno funkcję ForEach Loop, jak i ForEach-Object, powinny pozwolić na rozpoczęcie pracy i zastanowienie się nad możliwościami wykorzystania tych poleceń w swojej pracy.