デフォルトゲートウェイだけ変更する
デフォルトゲートウェイだけ変更したいというニーズがどのくらいあるのかわかりませんが、現在のプロジェクトで必要になりましたので作成してみました。
スクリプト
# 物理インターフェイスの取得
Get-NetAdapter -Physical | ForEach-Object{
# 静的IPアドレスの取得(DHCPは対象外)
$ipAddr = (Get-NetIPAddress -InterfaceIndex $_.ifIndex | Where-Object {($_.AddressFamily -eq "IPv4") -and ($_.PrefixOrigin -eq "Manual")}).IPAddress
# セグメント別でデフォルトゲートウェイを変更
switch($ipAddr) {
({$_ -like "192.168.1.*"}) {
netsh interface ipv4 set address name=$IfIdx static $IPAddr 255.255.255.0 192.168.1.254
}
({$_ -like "192.168.2.*"}) {
netsh interface ipv4 set address name=$IfIdx static $IPAddr 255.255.255.0 192.168.2.254
}
({$_ -like "192.168.3.*"}) {
netsh interface ipv4 set address name=$IfIdx static $IPAddr 255.255.255.0 192.168.3.254
}
}
}
上記スクリプトでは、物理インターフェイスのみを対象として静的アドレスが設定されている場合、指定のデフォルトゲートウェイアドレスを設定しています。
ネットワークアダプターの一覧を取得
「Get-NetAdapter」コマンドレットを使うと実行端末のネットワークアラプターのリストが取得できます。
> Get-NetAdapter
Name InterfaceDescription ifIndex Status MacAddress LinkSpeed
---- -------------------- ------- ------ ---------- ---------
VMware Network Adapte...8 VMware Virtual Ethernet Adapter for ... 11 Up xx-xx-xx-xx-xx-xx 100 Mbps
VMware Network Adapte...1 VMware Virtual Ethernet Adapter for ... 10 Up xx-xx-xx-xx-xx-xx 100 Mbps
イーサネット Intel(R) Ethernet Connection (2) I21... 7 Up xx-xx-xx-xx-xx-xx 1 Gbps
引数に「-Physical」を指定することで、物理ネットワークアダプターのみを取得する事ができます。
> Get-NetAdapter -Physical
Name InterfaceDescription ifIndex Status MacAddress LinkSpeed
---- -------------------- ------- ------ ---------- ---------
イーサネット Intel(R) Ethernet Connection (2) I21... 7 Up xx-xx-xx-xx-xx-xx 1 Gbps
IP アドレスの取得
「Get-NetIPAddress」コマンドレットを使用すると IP アドレスを取得することができます。
> Get-NetIPAddress -InterfaceIndex [インデックス番号]
IPAddress : 192.168.1.9
InterfaceIndex : 7
InterfaceAlias : イーサネット
AddressFamily : IPv4
Type : Unicast
PrefixLength : 16
PrefixOrigin : Manual
SuffixOrigin : Manual
AddressState : Preferred
ValidLifetime : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource : False
PolicyStore : ActiveStore
インターフェイスインデックス番号を指定し、ネットワークアダプターに設定された IP アドレスを取得します。
今回は、IPv4 の静的 IP アドレスが設定されたネットワークアダプターを対象としていますので、抽出条件として「AddressFamily」と「PrefixOrigin」を指定しています。
ゲートウェイアドレスの設定
「New-NetIPAddress」コマンドレットを使用すると、IP アドレスやサブネットマスク・デフォルトゲートウェイなどが設定できるのですが、静的 IP アドレスが設定されているネットワークアダプターに「New-NetIPaddress」コマンドレットで IP アドレスを設定した場合、同じネットワークアダプターに 2 つ目の IP アドレスが設定されてしまいます。そのため、「Remove-NetIPAddress」コマンドレットを実行した後で「New-NetIPAddress」コマンドレットを実行する必要があるとのこと。
そこで「netsh」コマンドが使えますので、1 コマンドで済ませるため「netsh」を使用しています。
netsh interface ipv4 set address name=[インデックス番号] static $IPAddr 255.255.255.0 192.168.1.254
コマンドレットを使用する場合は、次のようになります。
Remove-NetIPAddress -InterfaceIndex [インデックス番号] -IPAddress [IPアドレス] -PrefixLength [マスク] -DefaultGateway [デフォルトゲートウェイ]
New-NetIPAddress -InterfaceIndex [インデックス番号] -IPAddress [IPアドレス] -PrefixLength [マスク] -DefaultGateway [デフォルトゲートウェイ]