PowerShellのWMIとは?活用方法と実践ガイド

PowerShell は、Windows環境でシステム管理を自動化するために使用される強力なスクリプト言語です。

ITプロフェッショナルにとって、PowerShellは日常的なタスクを効率化するツールとして欠かせないものとなっています。

一方、WMI(Windows Management Instrumentation) は、Windows環境のハードウェアやソフトウェアを管理するためのフレームワークです。

WMIを使うと、システム情報の取得や、管理作業の実行が容易になります。

WMIは、ネットワークのモニタリングやリモート管理においても非常に便利です。

PowerShellとWMIを組み合わせることで、システム情報の取得や管理を強力に自動化することができます。

本記事では、PowerShellを使ってWMIを活用する方法について、基礎から応用まで詳しく解説します。


WMIを利用するメリット

WMIをPowerShellで利用するメリットとして、以下の点が挙げられます。

  1. システム情報の詳細な取得
    CPU、メモリ、ディスク、ネットワークといったハードウェアの情報や、インストールされているソフトウェアの一覧など、詳細なシステム情報を簡単に取得できます。
  2. リモート管理
    リモートマシンにアクセスし、システム情報を収集したり、設定を変更したりすることができます。
  3. 管理タスクの自動化
    定期的な監視やバックアップといった日常的な管理タスクを自動化することで、管理コストを削減できます。
  4. スクリプトでの操作性
    WMIをPowerShellのコマンドレットで簡単に操作でき、直感的に使えるため、スクリプトの開発がスムーズに進みます。

PowerShellでWMIを使う基本コマンド

Get-WmiObjectコマンド

PowerShellでWMIを使用する際に、基本的かつ最もよく使われるコマンドが Get-WmiObject です。

このコマンドは、WMIを通じてさまざまなシステム情報を取得するために使用されます。

基本的な構文

Get-WmiObject -Class <クラス名>

ここで、クラス名 にはWMIで扱うデータの種類を指定します。

例えば、システムのCPU情報を取得する場合は、クラス名に Win32_Processor を指定します。

CPU情報の取得

Get-WmiObject -Class Win32_Processor

上記のコマンドを実行すると、システムのCPUに関する詳細な情報が表示されます。

メモリ情報の取得

Get-WmiObject -Class Win32_PhysicalMemory

このコマンドで、システムに搭載されているメモリモジュールの詳細情報を取得できます。


Get-CimInstanceコマンド

Get-WmiObjectの代替として、より新しいコマンドが Get-CimInstance です。

Get-WmiObjectは古い技術をベースにしているため、将来的に Get-CimInstance に移行することが推奨されています。

基本的な構文

Get-CimInstance -ClassName <クラス名>

例えば、システムのディスク情報を取得する場合、以下のコマンドを使います。

Get-CimInstance -ClassName Win32_DiskDrive

Get-WmiObject と Get-CimInstance の違い

Get-CimInstanceは、WMIを使う際の最新のアプローチで、リモート管理時のパフォーマンスや信頼性が向上しています。

したがって、新しいスクリプトでは Get-CimInstance を使うことが推奨されます。


よく使われるWMIクラス

WMIには非常に多くのクラスがありますが、ここではシステム管理に役立つ主なクラスをいくつか紹介します。

クラス名説明
Win32_ProcessorCPUに関する情報を取得
Win32_OperatingSystemOSのバージョンやインストール情報を取得
Win32_PhysicalMemoryメモリモジュールに関する情報を取得
Win32_DiskDriveディスクドライブに関する情報を取得
Win32_NetworkAdapterネットワークアダプタの情報を取得
Win32_Serviceサービスの状態や設定に関する情報を取得
Win32_ComputerSystemシステム全体の情報を取得(ホスト名や製造元など)

WMIを使った応用例

ここからは、WMIを使用して具体的なシステム管理タスクを自動化する例を紹介します。

ハードウェア情報をまとめて取得するスクリプト

以下のスクリプトでは、CPU、メモリ、ディスクの情報を一度に取得し、システムの状態を確認します。

# CPU情報の取得
$cpu = Get-CimInstance -ClassName Win32_Processor

# メモリ情報の取得
$memory = Get-CimInstance -ClassName Win32_PhysicalMemory

# ディスク情報の取得
$disk = Get-CimInstance -ClassName Win32_DiskDrive

# 結果の表示
Write-Host "CPU Information:" $cpu.Name
Write-Host "Memory Capacity (MB):" ($memory.Capacity / 1MB)
Write-Host "Disk Model:" $disk.Model
Write-Host "Disk Size (GB):" ($disk.Size / 1GB)

このスクリプトを実行すると、システムの主要なハードウェア情報が表示されます。

管理者はこれを利用して、定期的にシステムの状態をチェックすることができます。


リモートPCのサービスを操作する

WMIを使用すると、リモートPC上での操作も可能です。

以下のスクリプトでは、リモートマシン上で実行されている特定のサービスを停止させます。

$computer = "RemotePCName"
$service = Get-WmiObject -Class Win32_Service -ComputerName $computer | Where-Object { $_.Name -eq "wuauserv" }

if ($service.Started) {
    $service.StopService()
    Write-Host "Windows Update Service stopped on $computer"
} else {
    Write-Host "Service is already stopped on $computer"
}

上記の例では、Windows Updateサービス(wuauserv)を停止しています。

-ComputerName パラメータを使用してリモートPCに接続し、操作を行います。


演習問題

問題 1: CPU情報の取得と出力

次のスクリプトを作成し、実行してください。システムのCPU名とそのクロック速度を取得して表示します。

Get-CimInstance -ClassName Win32_Processor | ForEach-Object {
    Write-Host "CPU Name:" $_.Name
    Write-Host "Clock Speed (MHz):" $_.MaxClockSpeed
}
解答例

実行結果例:

CPU Name: Intel(R) Core(TM) i7-10750H CPU @ 2.60GHz
Clock Speed (MHz): 2601

問題 2: メモリ使用状況の確認

システムに搭載されている物理メモリの容量と、使用可能なメモリ量をWMIを使って取得するスクリプトを作成してください。

Get-CimInstance -ClassName Win32_OperatingSystem | ForEach-Object {
    Write-Host "Total Physical Memory (MB):" ($_.TotalVisibleMemorySize / 1MB)
    Write-Host "Free Physical Memory (MB):" ($_.FreePhysicalMemory / 1MB)
}
解答例

実行結果例:

Total Physical Memory (MB): 16384
Free Physical Memory (MB

): 8192

まとめ

PowerShellとWMIを組み合わせることで、システム情報の取得や管理作業を自動化することが可能になります。

基本的な情報の取得から、リモート管理やサービスの操作まで幅広い用途で利用できるため、IT管理者にとって非常に有用です。

本記事で学んだ知識を活用し、日常の管理タスクを効率化してみましょう。