1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PowerShellでネットワークアダプターを無効化・有効化し、結果をログに残す

1
Posted at

PowerShellでネットワークアダプターを無効化・有効化し、結果をログに残す

はじめに

Windows端末や検証用PCで、ネットワークアダプターを一時的に無効化したい場面があります。

たとえば、

  • Wi-Fiを一時的に無効化したい
  • 有線LANと無線LANの両方が有効で経路が分かりづらい
  • 検証時に特定のインターフェースだけ使いたい
  • ネットワーク切替作業の前後をログに残したい
  • GUIではなくPowerShellで状態変更したい
  • 定期的に無線のセッションを切りたいとき

といったケースです。

この記事では、PowerShellでネットワークアダプターを無効化・有効化し、変更前後の状態をログに残すサンプルを紹介します。

想定する用途

このスクリプトは、以下のような場面を想定しています。

  • 検証端末のネットワークアダプター切替
  • Wi-Fi / 有線LAN の一時無効化
  • 現地作業時の経路固定
  • 端末ネットワーク設定の作業証跡取得
  • 作業前後のアダプター状態確認
  • タスク化されたネットワーク切替作業

やりたいこと

今回やりたいことは以下です。

  • 実行日時をログに残す
  • 変更前のネットワークアダプター状態を記録する
  • 指定したアダプターを無効化する
  • 必要に応じて有効化できるようにする
  • 変更後のアダプター状態を記録する
  • 結果をログファイルに保存する

注意:リモート接続中は慎重に扱う

ネットワークアダプターを無効化すると、通信が切れる可能性があります。

特に、リモートデスクトップやリモート操作中に対象アダプターを無効化すると、そのまま接続できなくなることがあります。

このスクリプトは、基本的に現地作業や検証端末など、通信断しても復旧できる状況で使う想定です。

スクリプト例

以下は、指定したネットワークアダプターを無効化し、変更前後の状態をログに残すPowerShellサンプルです。

# ==========================================
# ネットワークアダプター無効化スクリプト
# 変更前後の状態をログに残す
# ==========================================

# ログ出力先
$logPath = "C:\Users\Username\Desktop\disable.log"

# 無効化するアダプター名
$disableAdapters = @(
    "Wi-Fi",
    "イーサネット 2"
)

# 開始ログ
Get-Date -Format "yyyy/MM/dd HH:mm" | Out-File $logPath -Append
"===== Before Get-NetAdapter =====" | Out-File $logPath -Append
Get-NetAdapter | Out-File $logPath -Append

"===== Disable Network Adapter =====" | Out-File $logPath -Append

foreach ($adapter in $disableAdapters) {
    "Disable: $adapter" | Out-File $logPath -Append
    Disable-NetAdapter -Name $adapter -Confirm:$false
}

"===== After Get-NetAdapter =====" | Out-File $logPath -Append
Get-NetAdapter | Out-File $logPath -Append

Get-Date -Format "yyyy/MM/dd HH:mm" | Out-File $logPath -Append
"===== End =====" | Out-File $logPath -Append

有効化する場合

無効化したアダプターを有効化する場合は、Enable-NetAdapter を使います。

Enable-NetAdapter -Name "Wi-Fi" -Confirm:$false
Enable-NetAdapter -Name "イーサネット 2" -Confirm:$false

有効化も含めたサンプルは以下です。

# 有効化するアダプター名
$enableAdapters = @(
    "Wi-Fi",
    "イーサネット 2"
)

foreach ($adapter in $enableAdapters) {
    "Enable: $adapter" | Out-File $logPath -Append
    Enable-NetAdapter -Name $adapter -Confirm:$false
}

アダプター名を確認する

対象アダプター名は、以下で確認できます。

Get-NetAdapter

出力例です。

Name             InterfaceDescription                    Status
----             --------------------                    ------
Wi-Fi            Intel(R) Wireless-AC Adapter             Up
イーサネット     Intel(R) Ethernet Connection             Up
イーサネット 2   USB Ethernet Adapter                     Disabled

スクリプト内の -Name には、この Name を指定します。

変更前後を残す理由

ネットワークアダプターの状態変更では、

  • 変更前にどのアダプターが有効だったか
  • どのアダプターを無効化したか
  • 変更後に意図した状態になったか
  • 作業時刻はいつか

を後から確認したくなることがあります。

そのため、このスクリプトでは変更前後に Get-NetAdapter を実行してログに残しています。

このスクリプトでできること

このスクリプトでは、以下のことができます。

  • ネットワークアダプター一覧を確認する
  • 指定したアダプターを無効化する
  • 指定したアダプターを有効化する
  • 変更前後の状態をログに残す
  • 作業日時をログに残す
  • 検証端末や作業端末の状態変更を標準化する

注意点

管理者権限が必要

Disable-NetAdapterEnable-NetAdapter の実行には管理者権限が必要です。

PowerShellは管理者として実行してください。

アダプター名を間違えない

指定するアダプター名を間違えると、意図しないネットワークアダプターを無効化する可能性があります。

実行前に Get-NetAdapter で対象を確認してください。

リモート接続中は実行しない方がよい

リモート接続で使用しているアダプターを無効化すると、接続が切断されます。

現地で復旧できる状況か、別経路で接続できる状況で実行してください。

Wi-Fiと有線LANの両方を無効化しないよう注意する

複数のアダプターをまとめて無効化する場合、端末が完全にネットワークから切り離される可能性があります。

検証目的で意図的に行う場合を除き、対象は慎重に選びます。

ログ出力先を確認する

ログ出力先に書き込み権限がない場合、ログが残りません。

作業証跡を残す目的であれば、ログ出力先も事前に確認します。

まとめ

PowerShellの Disable-NetAdapterEnable-NetAdapter を使うことで、ネットワークアダプターの無効化・有効化をスクリプト化できます。

ただし、ネットワークアダプターの状態変更は通信断につながる可能性があります。

大事なのは、

アダプターを無効化すること

だけではなく、

変更前後の状態を確認し、戻せる材料を残すこと

だと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?