PowerShell でネストされた ForEach-Object と Where-Object

MD Aminul Islam 2023年6月21日
  1. PowerShell で Where-Object コマンドレットを使用する
  2. PowerShell で ForEach-Object コマンドレットを使用する
  3. PowerShell でネストされた ForEach-ObjectWhere-Object を使用する
PowerShell でネストされた ForEach-Object と Where-Object

Where-ObjectForEach-Objectは、PowerShell で最もよく使用される 2つのコマンドレットです。 Where-Object は WHERE のように機能し、ForEach-Object は FOREACH のように機能します。

この記事では、Where-ObjectForEach-Object をさまざまな目的に使用する方法について説明します。 また、トピックを簡単にするために必要な例と説明も表示されます。

PowerShell で Where-Object コマンドレットを使用する

Where-Object は、出力コマンドをフィルター処理し、表示する情報を表示する組み込みのコマンドレットです。 通常、Where-Object はフィルターのように機能します。

また、true または false を返す条件を作成することもできます。

以下の例では、コンピュータ上で automatic モードで実行されているすべてのサービスを見つけます。 この目的のためのコマンドは、次のようなものです。

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

上記のコマンド行を実行すると、次のような出力が得られます。

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

PowerShell で ForEach-Object コマンドレットを使用する

ForEach-Object を使用すると、指定した各オブジェクトに対して特定のタスクを実行できます。 以下の例では、各オブジェクトを 1024 で割ります。

この例のコードは次のようになります。

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

上記のコマンド行を実行すると、次のような出力が得られます。

2.9296875
554.66796875
109.796875

PowerShell でネストされた ForEach-ObjectWhere-Object を使用する

以下では、ネストされたモードで ForEach-ObjectWhere-Object の両方を使用する例を共有しました。 コードは次のようになります。

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

上記のコマンド行を実行すると、次の出力が得られます。

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

ここで共有されているサンプル コードは、Windows PowerShell 環境でのみ実行可能であることに注意してください。

著者: MD Aminul Islam
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

関連記事 - PowerShell Object