Verschachteltes ForEach-Object und Where-Object in PowerShell

MD Aminul Islam 21 Juni 2023
  1. Verwenden Sie das Where-Object-Cmdlet in PowerShell
  2. Verwenden Sie das ForEach-Object-Cmdlet in PowerShell
  3. Verwenden Sie in PowerShell verschachtelte ForEach-Object und Where-Object
Verschachteltes ForEach-Object und Where-Object in PowerShell

Where-Object und ForEach-Object sind die beiden am häufigsten verwendeten Cmdlets in PowerShell. Das Where-Object funktioniert wie WHERE und das ForEach-Object funktioniert wie FOREACH.

In diesem Artikel wird erläutert, wie wir Where-Object und ForEach-Object für verschiedene Zwecke verwenden können. Außerdem werden wir notwendige Beispiele und Erklärungen sehen, um das Thema einfacher zu machen.

Verwenden Sie das Where-Object-Cmdlet in PowerShell

Das Where-Object ist ein integriertes Cmdlet, das den Ausgabebefehl filtert und die gewünschten Informationen anzeigt. Generell funktioniert das Where-Object wie ein Filter.

Außerdem können Sie Bedingungen erstellen, die entweder wahr oder falsch zurückgeben können.

Im folgenden Beispiel finden wir alle Dienste, die auf unserem Computer im automatischen Modus ausgeführt werden. Der Befehl für diesen Zweck sieht in etwa wie folgt aus:

Get-Service | Where-Object -FilterScript {$_.StartType -EQ 'Automatic'}

Nachdem Sie die obige Befehlszeile ausgeführt haben, erhalten Sie eine Ausgabe wie die folgende:

Status   Name               DisplayName
------   ----               -----------
Running  AudioEndpointBu... Windows Audio Endpoint Builder
Running  Audiosrv           Windows Audio
Running  BFE                Base Filtering Engine
Running  Bonjour Service    Bonjour Service
Running  BrokerInfrastru... Background Tasks Infrastructure Ser...
Running  CDPSvc             Connected Devices Platform Service
Running  CDPUserSvc_1505... Connected Devices Platform User Ser...
Running  ClickToRunSvc      Microsoft Office Click-to-Run Service
Running  CoreMessagingRe... CoreMessaging
Running  cplspcon           Intel(R) Content Protection HDCP Se...
Running  CryptSvc           Cryptographic Services
Running  CxAudMsg           Conexant Audio Message Service
Running  CxUtilSvc          CxUtilSvc
Running  DcomLaunch         DCOM Server Process Launcher
Running  Dhcp               DHCP Client
Running  DiagTrack          Connected User Experiences and Tele...
Running  DispBrokerDeskt... Display Policy Service
Running  Dnscache           DNS Client
Running  Dolby DAX2 API ... Dolby DAX2 API Service
Running  DoSvc              Delivery Optimization
Running  DPS                Diagnostic Policy Service
Stopped  DSAService         Intel(R) Driver & Support Assistant
Running  DusmSvc            Data Usage
Stopped  edgeupdate         Microsoft Edge Update Service (edge...
Running  ElevationService   Wondershare Driver Install Service ...
Stopped  ESRV_SVC_QUEENC... Energy Server Service queencreek
Running  EventLog           Windows Event Log
Running  EventSystem        COM+ Event System
Running  FontCache          Windows Font Cache Service
Stopped  gpsvc              Group Policy Client
Running  ibtsiva            Intel Bluetooth Service
Running  igccservice        Intel(R) Graphics Command Center Se...
Running  igfxCUIService2... Intel(R) HD Graphics Control Panel ...
Running  iphlpsvc           IP Helper
Running  LanmanServer       Server
Running  LanmanWorkstation  Workstation
Running  LSM                Local Session Manager
Stopped  MapsBroker         Downloaded Maps Manager
Running  mpssvc             Windows Defender Firewall
Running  NlaSvc             Network Location Awareness
Running  nsi                Network Store Interface Service
Running  OneSyncSvc_1505... Sync Host_1505b45f
Running  Power              Power
Running  ProfSvc            User Profile Service
Running  RasMan             Remote Access Connection Manager
Running  RpcEptMapper       RPC Endpoint Mapper
Running  RpcSs              Remote Procedure Call (RPC)
Running  SamSs              Security Accounts Manager
Running  SAService          Conexant SmartAudio service
Running  Schedule           Task Scheduler
Running  SENS               System Event Notification Service
Running  SgrmBroker         System Guard Runtime Monitor Broker
Running  ShellHWDetection   Shell Hardware Detection
Running  Spooler            Print Spooler
Stopped  sppsvc             Software Protection
Running  stisvc             Windows Image Acquisition (WIA)
Running  StorSvc            Storage Service
Running  SynTPEnhService    SynTPEnh Caller Service
Running  SystemEventsBroker System Events Broker
Stopped  SystemUsageRepo... Intel(R) System Usage Report Servic...
Running  Themes             Themes
Running  TrkWks             Distributed Link Tracking Client
Running  UserManager        User Manager
Running  UsoSvc             Update Orchestrator Service
Running  Wcmsvc             Windows Connection Manager
Running  WinDefend          Microsoft Defender Antivirus Service
Running  Winmgmt            Windows Management Instrumentation
Running  WlanSvc            WLAN AutoConfig
Running  Wondershare Ins... Wondershare Install Assist Service
Running  WpnService         Windows Push Notifications System S...
Running  WpnUserService_... Windows Push Notifications User Ser...
Stopped  WsAppService       Wondershare Application Framework S...
Running  wscsvc             Security Center
Running  WSearch            Windows Search

Verwenden Sie das ForEach-Object-Cmdlet in PowerShell

Mit dem ForEach-Object können Sie für jedes angegebene Objekt eine bestimmte Aufgabe ausführen. In unserem Beispiel unten teilen wir jedes Objekt durch 1024.

Der Code für unser Beispiel sieht wie folgt aus:

3000, 567980, 112432 | ForEach-Object -Process {$_/1024}

Nachdem Sie die obige Befehlszeile ausgeführt haben, erhalten Sie eine Ausgabe wie unten gezeigt:

2.9296875
554.66796875
109.796875

Verwenden Sie in PowerShell verschachtelte ForEach-Object und Where-Object

Unten haben wir ein Beispiel für die Verwendung von ForEach-Object und Where-Object im verschachtelten Modus geteilt. Der Code wird etwa wie folgt aussehen:

$MyArray = ("zoom", "explorer", "edge")
$MyArray | ForEach-Object { get-process | Where-Object ProcessName -EQ $_ | Out-Host }

Nachdem Sie die obige Befehlszeile ausgeführt haben, erhalten Sie diese Ausgabe:

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
   2054      78    65900     136676      30.17   4496   7 explorer

Bitte beachten Sie, dass die hier freigegebenen Beispielcodes nur in der Windows PowerShell-Umgebung ausführbar sind.

MD Aminul Islam avatar MD Aminul Islam avatar

Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.

LinkedIn

Verwandter Artikel - PowerShell Object