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-NetAdapter や Enable-NetAdapter の実行には管理者権限が必要です。
PowerShellは管理者として実行してください。
アダプター名を間違えない
指定するアダプター名を間違えると、意図しないネットワークアダプターを無効化する可能性があります。
実行前に Get-NetAdapter で対象を確認してください。
リモート接続中は実行しない方がよい
リモート接続で使用しているアダプターを無効化すると、接続が切断されます。
現地で復旧できる状況か、別経路で接続できる状況で実行してください。
Wi-Fiと有線LANの両方を無効化しないよう注意する
複数のアダプターをまとめて無効化する場合、端末が完全にネットワークから切り離される可能性があります。
検証目的で意図的に行う場合を除き、対象は慎重に選びます。
ログ出力先を確認する
ログ出力先に書き込み権限がない場合、ログが残りません。
作業証跡を残す目的であれば、ログ出力先も事前に確認します。
まとめ
PowerShellの Disable-NetAdapter と Enable-NetAdapter を使うことで、ネットワークアダプターの無効化・有効化をスクリプト化できます。
ただし、ネットワークアダプターの状態変更は通信断につながる可能性があります。
大事なのは、
アダプターを無効化すること
だけではなく、
変更前後の状態を確認し、戻せる材料を残すこと
だと思います。