経緯
PowerShell からネットワークアダプタのデフォルトゲートウェイの設定を変更したくなったので検証。
コード
早速コードを。
etherstrike.ps1
# ネットワークアダプタのエイリアス
[String]$netAdaptorName = 'Ethernet'
# 指定したいデフォルトゲートウェイの値
[String]$dgw = '192.0.2.1'
# IP設定を取得
$ipConfig = Get-NetAdapter | Where-Object {$_.InterfaceAlias -eq "$netAdaptorName"} | Get-NetIPConfiguration
# 現在の設定値をいったん退避
$nowIP = $ipConfig.IPv4Address.IPAddress
$nowSubnet = $ipConfig.IPv4Address.PrefixLength
# いったん削除
$ipConfig | Remove-NetIPAddress -AddressFamily "IPv4" -Confirm:$False
$ipConfig | Remove-NetRoute -AddressFamily "IPv4" -Confirm:$False
# 再登録
$ipConfig | New-NetIPAddress `
-AddressFamily "IPv4" `
-IPAddress $nowIP `
-PrefixLength $nowSubnet `
-DefaultGateway $dgw
start.bat
cd /d %~dp0
PowerShell -ExecutionPolicy Bypass .\etherstrike.ps1
@pause
- PowerShell のコマンドレットでは
New-NetIPAddress
を使って IPアドレス 、サブネットマスク、デフォルトゲートウェイの値をセットで割り当てる必要があります。 - 同コマンドレットは上書き (既存の値が存在しているところに変更を加える) はできないので、
- いったん IPアドレス 、サブネットマスク、デフォルトゲートウェイの値を削除する (事前にIPとサブネットマスクは退避する)
- 再度3つを割り当て (このときにデフォルトゲートウェイの値のみ差し替えたい値に挿しかえる)
- という段取りを踏むことになります。
- 設定変更したいネットワークアダプタについてはネットワークアダプタのエイリアスを使用して絞り込むので、その値も必要です。
- IPアドレス周りの設定を変更するためには管理者実行が必要なので注意。
……と、いくつか注意事項がありますがそれらを押さえれば可能ということが分かりました。
特に管理者権限が必要なところは実行時に注意ですね。