PowerShellでWindows 11のネットワーク一覧をスクリプトで生成・ドキュメント化する方法

ネットワーク管理において、正確で最新のネットワーク情報を把握することは、システムの安定運用に不可欠です。本記事では、Windows 11環境でPowerShellを使用してネットワーク一覧をスクリプトで生成し、自動的にドキュメント化する方法を詳しく解説します。PowerShellの基本から実践例まで、初心者でも分かりやすい手順で説明しているため、IT管理者やエンジニアに役立つ内容となっています。これにより、効率的にネットワーク情報を収集し、管理タスクを大幅に簡素化できます。

目次

PowerShellの基本とセットアップ

PowerShellは、Windowsシステム管理を効率化するために設計された強力なスクリプト言語およびコマンドラインツールです。Windows 11には標準でインストールされており、簡単に利用を開始できます。

PowerShellの基本概念

PowerShellは、以下の特徴を持っています。

  • オブジェクトベース:PowerShellでは、コマンドの出力がテキストではなく.NETオブジェクトとして扱われます。
  • クロスプラットフォーム対応:PowerShell 7以降では、Windows以外のOS(Linux、macOS)でも動作します。
  • モジュールの拡張性:追加のモジュールをインストールすることで機能を拡張できます。

PowerShellのセットアップ方法

以下の手順でPowerShellの環境を整備します。

1. PowerShellのバージョン確認

Windows 11には標準でPowerShellがインストールされていますが、最新バージョンを使用することをお勧めします。以下のコマンドを実行してバージョンを確認します。

$PSVersionTable.PSVersion

バージョンが古い場合、PowerShell公式サイトから最新のバージョンをダウンロードしてください。

2. 必要なモジュールのインストール

ネットワーク関連のコマンドを効率的に利用するため、以下のモジュールをインストールします。

Install-Module -Name NetAdapter -Force

これにより、ネットワークアダプタ関連の情報を簡単に取得できるようになります。

3. スクリプト実行ポリシーの設定

スクリプトを実行するには、適切な実行ポリシーを設定する必要があります。以下のコマンドでポリシーを確認および変更します。

Get-ExecutionPolicy
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

これでローカルのスクリプトが実行可能になります。

PowerShellの活用準備

以上の手順を完了すると、PowerShellでのスクリプト作成やネットワーク管理がスムーズに行える環境が整います。次のステップでは、ネットワーク情報を取得する具体的な方法を解説します。

ネットワーク一覧取得コマンドの基礎

Windows 11でネットワーク情報を取得するには、PowerShellが提供する豊富なコマンドを活用します。ここでは、基本的なネットワーク情報取得コマンドとその使い方を説明します。

Get-NetAdapter

このコマンドは、システム内のネットワークアダプタの情報を取得するために使用されます。以下のコマンドを実行すると、ネットワークアダプタの一覧が表示されます。

Get-NetAdapter

出力例:

Name           InterfaceDescription         Status    MacAddress          LinkSpeed
----           --------------------         ------    ----------          ---------
Ethernet       Intel(R) Ethernet Adapter    Up        00-1A-2B-3C-4D-5E   1 Gbps
Wi-Fi          Intel(R) Wi-Fi Adapter       Up        11-22-33-44-55-66   300 Mbps

Get-NetIPAddress

ネットワークアダプタに関連付けられているIPアドレスを取得します。

Get-NetIPAddress

出力例:

IPAddress         InterfaceAlias       AddressFamily   Type       PrefixLength
---------         --------------       -------------   ----       ------------
192.168.1.100     Ethernet             IPv4            Unicast    24
fe80::1a2b:3c4d   Ethernet             IPv6            Unicast    64

Get-DnsClientServerAddress

DNSサーバーのアドレスを取得するには、このコマンドを使用します。

Get-DnsClientServerAddress

出力例:

InterfaceAlias       InterfaceIndex   ServerAddresses
--------------       --------------   ---------------
Ethernet             12               {192.168.1.1}
Wi-Fi                14               {8.8.8.8, 8.8.4.4}

Get-NetRoute

ルーティングテーブルを確認する場合は、このコマンドを使用します。

Get-NetRoute

出力例:

DestinationPrefix    NextHop          RouteMetric   InterfaceAlias
-----------------    -------          -----------   --------------
0.0.0.0/0           192.168.1.1      25            Ethernet
192.168.1.0/24      0.0.0.0          0             Ethernet

基本コマンドの組み合わせ

これらのコマンドを組み合わせることで、より詳細なネットワーク情報を取得できます。例えば、特定のネットワークアダプタに関連付けられたIPアドレスのみを取得するには、次のようにコマンドを組み合わせます。

Get-NetAdapter -Name "Ethernet" | Get-NetIPAddress

次のステップ

次は、これらのコマンドをスクリプトとして自動化し、効率的にネットワーク情報を取得する方法を説明します。

スクリプトでネットワーク一覧を取得する方法

PowerShellスクリプトを使用すると、ネットワーク情報の取得と整理を自動化できます。ここでは、実用的なスクリプト例を示し、各部分の詳細を説明します。

ネットワーク情報取得スクリプトの基本構造

以下のスクリプトは、システム内のネットワークアダプタ情報とIPアドレスを取得し、コンソールに表示する基本例です。

# スクリプト開始
# ネットワークアダプタ情報を取得
$adapters = Get-NetAdapter | Where-Object { $_.Status -eq "Up" }

# 各アダプタの詳細情報を取得
foreach ($adapter in $adapters) {
    Write-Output "アダプタ名: $($adapter.Name)"
    Write-Output "MACアドレス: $($adapter.MacAddress)"
    Write-Output "リンク速度: $($adapter.LinkSpeed)"

    # アダプタに関連付けられたIPアドレスを取得
    $ipAddresses = Get-NetIPAddress -InterfaceIndex $adapter.InterfaceIndex
    foreach ($ip in $ipAddresses) {
        Write-Output "  IPアドレス: $($ip.IPAddress)"
        Write-Output "  アドレスファミリ: $($ip.AddressFamily)"
    }
    Write-Output ""
}
# スクリプト終了

スクリプトの説明

1. ネットワークアダプタ情報の取得

$adapters = Get-NetAdapter | Where-Object { $_.Status -eq "Up" }

Get-NetAdapterコマンドを使用して、稼働中のネットワークアダプタのみを取得しています。

2. アダプタ情報の表示

Write-Output "アダプタ名: $($adapter.Name)"
Write-Output "MACアドレス: $($adapter.MacAddress)"
Write-Output "リンク速度: $($adapter.LinkSpeed)"

アダプタ名、MACアドレス、リンク速度など、基本的な情報を表示しています。

3. IPアドレスの取得

$ipAddresses = Get-NetIPAddress -InterfaceIndex $adapter.InterfaceIndex

各アダプタに関連付けられているIPアドレスを取得し、詳細をループで表示しています。

応用例:情報のフィルタリング

特定の条件で情報をフィルタリングすることも可能です。例えば、IPv4アドレスのみを表示するには次のようにします。

$ipAddresses = Get-NetIPAddress -InterfaceIndex $adapter.InterfaceIndex | Where-Object { $_.AddressFamily -eq "IPv4" }

次のステップ

このスクリプトを改良し、取得したネットワーク情報をCSVやHTML形式でエクスポートする方法を次に解説します。これにより、情報をより効果的に整理し、共有することが可能になります。

CSVやHTML形式でのデータ出力方法

PowerShellを使用すると、取得したネットワーク情報をCSVやHTML形式で簡単にエクスポートできます。この機能を活用することで、データを効率的に保存・共有できます。

CSV形式への出力

CSV形式は、データを構造的に保存するのに便利な形式です。以下はネットワーク情報をCSVファイルに出力するスクリプト例です。

# ネットワーク情報の収集
$networkData = Get-NetAdapter | Where-Object { $_.Status -eq "Up" } | ForEach-Object {
    $adapter = $_
    Get-NetIPAddress -InterfaceIndex $adapter.InterfaceIndex | ForEach-Object {
        [PSCustomObject]@{
            AdapterName    = $adapter.Name
            MacAddress     = $adapter.MacAddress
            LinkSpeed      = $adapter.LinkSpeed
            IPAddress      = $_.IPAddress
            AddressFamily  = $_.AddressFamily
        }
    }
}

# CSV形式で保存
$networkData | Export-Csv -Path "C:\network_info.csv" -NoTypeInformation -Encoding UTF8
Write-Output "ネットワーク情報をC:\network_info.csvに保存しました。"

スクリプトの解説

  • [PSCustomObject]: 出力データをカスタムオブジェクトとして構築し、整然とした形式にします。
  • Export-Csv: データをCSV形式で保存します。-NoTypeInformationオプションで型情報の出力を省略しています。

HTML形式への出力

HTML形式でエクスポートすると、視覚的に分かりやすいデータ表示が可能になります。以下はその例です。

# ネットワーク情報の収集
$networkData = Get-NetAdapter | Where-Object { $_.Status -eq "Up" } | ForEach-Object {
    $adapter = $_
    Get-NetIPAddress -InterfaceIndex $adapter.InterfaceIndex | ForEach-Object {
        [PSCustomObject]@{
            AdapterName    = $adapter.Name
            MacAddress     = $adapter.MacAddress
            LinkSpeed      = $adapter.LinkSpeed
            IPAddress      = $_.IPAddress
            AddressFamily  = $_.AddressFamily
        }
    }
}

# HTML形式で保存
$networkData | ConvertTo-Html -Title "Network Information" | Out-File -FilePath "C:\network_info.html"
Write-Output "ネットワーク情報をC:\network_info.htmlに保存しました。"

スクリプトの解説

  • ConvertTo-Html: データをHTML形式に変換します。-TitleオプションでHTMLページのタイトルを設定しています。
  • Out-File: ファイルにHTMLコンテンツを保存します。

出力されたファイルの確認

  • CSVファイルはExcelやテキストエディタで開くことができます。
  • HTMLファイルはブラウザで開くと、テーブル形式でネットワーク情報が表示されます。

応用例

以下のように、カスタムCSSを追加してHTML出力をスタイリッシュにすることも可能です。

$css = @"
<style>
    table { border-collapse: collapse; width: 100%; }
    th, td { border: 1px solid black; padding: 8px; text-align: left; }
    th { background-color: #f2f2f2; }
</style>
"@

($css + ($networkData | ConvertTo-Html -Fragment)) | Out-File -FilePath "C:\styled_network_info.html"

次のステップ

エクスポートしたデータをもとに、さらに自動的にドキュメントを生成し、カスタマイズする方法を次に解説します。

ドキュメントの自動生成とカスタマイズ

PowerShellを活用してネットワーク情報をエクスポートしたデータをドキュメント化することで、整理されたレポートを作成できます。ここでは、CSVやHTMLデータを基に、効率的にドキュメントを生成する方法とカスタマイズの手法を解説します。

Markdown形式でのドキュメント生成

Markdownは、軽量で読みやすいテキストベースのフォーマットで、簡単にドキュメントを生成できます。

# ネットワーク情報の収集
$networkData = Get-NetAdapter | Where-Object { $_.Status -eq "Up" } | ForEach-Object {
    $adapter = $_
    Get-NetIPAddress -InterfaceIndex $adapter.InterfaceIndex | ForEach-Object {
        [PSCustomObject]@{
            AdapterName    = $adapter.Name
            MacAddress     = $adapter.MacAddress
            LinkSpeed      = $adapter.LinkSpeed
            IPAddress      = $_.IPAddress
            AddressFamily  = $_.AddressFamily
        }
    }
}

# Markdown形式でドキュメント生成
$markdown = @"
# ネットワーク情報レポート

| アダプタ名      | MACアドレス        | リンク速度 | IPアドレス       | アドレスファミリ |
|-----------------|--------------------|------------|------------------|------------------|
$(
    $networkData | ForEach-Object {
        "| $($_.AdapterName) | $($_.MacAddress) | $($_.LinkSpeed) | $($_.IPAddress) | $($_.AddressFamily) |"
    } | Out-String
)
"@

# ファイルに保存
$markdown | Set-Content -Path "C:\network_report.md"
Write-Output "MarkdownレポートをC:\network_report.mdに保存しました。"

スクリプトのポイント

  • Markdown形式でテーブルを作成し、ネットワーク情報を埋め込んでいます。
  • 簡単に見やすいドキュメントを生成可能です。

PDF形式への変換

生成したMarkdownやHTMLファイルをPDF形式に変換するには、外部ツールを利用します。以下はwkhtmltopdfを使用する例です。

# HTMLファイルをPDFに変換
Start-Process -FilePath "wkhtmltopdf" -ArgumentList "C:\network_info.html", "C:\network_report.pdf" -NoNewWindow -Wait
Write-Output "PDFレポートをC:\network_report.pdfに保存しました。"

カスタマイズオプション

1. ヘッダーとフッターの追加

HTML形式のレポートにヘッダーやフッターを追加することで、ドキュメントをさらに充実させられます。

$htmlContent = Get-Content -Path "C:\network_info.html" -Raw
$customHeader = "<h1>ネットワーク情報レポート</h1><hr>"
$customFooter = "<hr><p>Generated by PowerShell</p>"
($customHeader + $htmlContent + $customFooter) | Set-Content -Path "C:\custom_network_info.html"

2. ロゴやグラフの追加

HTML形式のレポートにロゴやグラフを挿入して、ビジュアルを強化できます。

3. 自動メール送信

生成したレポートをメールで送信することで、チーム内で迅速に情報共有が可能です。

Send-MailMessage -From "[email protected]" -To "[email protected]" -Subject "ネットワークレポート" -Body "最新レポートを添付します。" -Attachments "C:\network_report.pdf" -SmtpServer "smtp.example.com"

次のステップ

次は、実際のIT資産管理レポートの作成を例に、PowerShellスクリプトを実践的に応用する方法を解説します。

実践例:IT資産管理レポートの作成

PowerShellを活用して、企業内のIT資産管理に役立つレポートを作成する手順を実践例として紹介します。ネットワーク情報を収集・整理し、レポート形式で保存する方法を詳しく解説します。

IT資産管理レポートの概要

このレポートは、以下の情報を網羅するものとします:

  • ネットワークアダプタの名称とMACアドレス
  • 接続速度とIPアドレス
  • DNSサーバーおよびデフォルトゲートウェイ
  • レポートの生成日時

スクリプト例:IT資産管理レポート作成

以下のスクリプトを使用して、ネットワーク情報を取得し、HTML形式のIT資産レポートを生成します。

# ネットワーク情報の収集
$networkData = Get-NetAdapter | Where-Object { $_.Status -eq "Up" } | ForEach-Object {
    $adapter = $_
    $ipInfo = Get-NetIPAddress -InterfaceIndex $adapter.InterfaceIndex | Where-Object { $_.AddressFamily -eq "IPv4" }
    $dnsServers = Get-DnsClientServerAddress -InterfaceIndex $adapter.InterfaceIndex
    [PSCustomObject]@{
        AdapterName    = $adapter.Name
        MacAddress     = $adapter.MacAddress
        LinkSpeed      = $adapter.LinkSpeed
        IPAddress      = $ipInfo.IPAddress
        Gateway        = $ipInfo.PrefixOrigin
        DnsServers     = ($dnsServers.ServerAddresses -join ", ")
    }
}

# レポート生成
$htmlContent = @"
<!DOCTYPE html>
<html>
<head>
    <title>IT資産管理レポート</title>
    <style>
        table { border-collapse: collapse; width: 100%; }
        th, td { border: 1px solid black; padding: 8px; text-align: left; }
        th { background-color: #f2f2f2; }
    </style>
</head>
<body>
    <h1>IT資産管理レポート</h1>
    <p>レポート生成日時: $(Get-Date -Format "yyyy-MM-dd HH:mm:ss")</p>
    <table>
        <thead>
            <tr>
                <th>アダプタ名</th>
                <th>MACアドレス</th>
                <th>リンク速度</th>
                <th>IPアドレス</th>
                <th>ゲートウェイ</th>
                <th>DNSサーバー</th>
            </tr>
        </thead>
        <tbody>
            $(
                $networkData | ForEach-Object {
                    "<tr><td>$($_.AdapterName)</td><td>$($_.MacAddress)</td><td>$($_.LinkSpeed)</td><td>$($_.IPAddress)</td><td>$($_.Gateway)</td><td>$($_.DnsServers)</td></tr>"
                } | Out-String
            )
        </tbody>
    </table>
</body>
</html>
"@

# ファイルに保存
$htmlContent | Set-Content -Path "C:\IT_Asset_Report.html"
Write-Output "IT資産管理レポートをC:\IT_Asset_Report.htmlに保存しました。"

スクリプトの説明

1. ネットワーク情報の収集

  • Get-NetAdapterとGet-NetIPAddressを組み合わせて、アダプタ情報とIPv4アドレスを取得します。
  • Get-DnsClientServerAddressを使用してDNSサーバー情報を追加します。

2. HTML形式のレポート作成

  • HTMLのテンプレートをスクリプト内に組み込み、ネットワークデータをテーブル形式で埋め込みます。
  • CSSを使用して、見やすいレイアウトに整えています。

3. レポートの保存

  • 完成したHTMLをファイルとして保存し、ブラウザで閲覧可能にします。

レポートの活用例

  • 定期的にレポートを生成し、IT資産の管理状況を記録。
  • チーム内で共有して、ネットワーク構成の可視化を促進。
  • レポートにカスタムフィールドを追加して、企業独自の要件に対応。

次のステップ

最後に、この記事全体のまとめを行い、PowerShellを使用したネットワーク情報の管理の重要性を振り返ります。

まとめ

本記事では、Windows 11環境においてPowerShellを活用し、ネットワーク情報を効率的に収集・整理・ドキュメント化する方法を解説しました。PowerShellの基本セットアップから始め、ネットワーク情報の取得、CSVやHTML形式へのエクスポート、さらにIT資産管理レポートの作成までの一連の手順を詳しく紹介しました。

適切にネットワーク情報を管理することで、以下のメリットを得られます:

  • 作業の自動化による効率化
  • 正確で最新の情報の可視化
  • ドキュメント化によるチーム間の情報共有促進

PowerShellの柔軟性を活用することで、IT管理者やエンジニアはネットワーク管理業務を大幅に効率化できます。ぜひ、本記事を参考に、実際の業務で試してみてください。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次