PowerShell でネットワーク設定を管理するのは、もはや熟練のシステム管理者だけのものではありません。特に、複数のマシンを扱っている場合や、何かを自動化したい場合は、必要不可欠です。私は、いくつかの Windows ボックスで IP アドレスを変更したり、静的と DHCP を切り替えたりしようとして頭を悩ませてきましたが、正直、PowerShell コマンドレットを使用すると、はるかに苦痛が軽減されます。さらに、GUI の動作が不安定だったり、非表示のネットワーク アダプターがわかりにくかったりする場合は、これらのコマンドを使用すると、すべてを制御できます。ただし、一部のセットアップ、特に Hyper-V または VPN アダプターを扱う場合は、追加のパラメーターを追加したり、管理者として PowerShell を実行したりする必要がある場合がありますので注意してください。作業を進めるにつれて、IP アドレス、NIC 名、またはインターフェイスがリストされることを期待してください。とにかく、これは常に直感的であるとは限りません。Windows はネットワーク構成が奇妙な場合があります。しかし、適切なコマンドのコツをつかめば、かなりスムーズに進むでしょう。
PowerShell を使用して Windows のネットワーク アダプターの設定を修正する方法
PowerShell によるネットワーク アダプターの設定の管理
すべてのネットワークアダプタを一覧表示することが最初のステップです。以下を実行します。
Get-NetAdapter
これにより、名前、ステータス(「Up」または「Down」など)、MACアドレス、速度が表示されます。非表示のアダプタや仮想アダプタが問題を引き起こすケースがあったので、可能性のあるアダプタをすべて含めるには、次のコマンドを実行してください。
Get-NetAdapter –IncludeHidden
Windowsで通常は非表示になっているものも含め、すべてを表示します。VPNや仮想スイッチが分かりにくい場合に便利です。「Ethernet0」や「Wi-Fi」など、調整したいインターフェース名が表示されたら、有効化または無効化できます。
Enable-NetAdapter -Name Ethernet0 Disable-NetAdapter -Name Ethernet0
わかりやすくするために、アダプタの名前を変更する必要がある場合があります。
Rename-NetAdapter -Name Ethernet0 -NewName LAN
VPN または VLAN の問題をトラブルシューティングする場合は、VlanID を確認してください。
Get-NetAdapter | ft Name, Status, Linkspeed, VlanID
現在のIP設定を取得して何が起こっているかを知る
不安定な Wi-Fi または有線接続があり、どこに何が割り当てられているのか疑問に思っている場合は、次のコマンドで詳細がわかります。
Get-NetIPConfiguration -InterfaceAlias Ethernet0
DHCP ステータス、デフォルト ゲートウェイ、実際に割り当てられた IP などの詳細情報については、以下を参照してください。
Get-NetIPConfiguration -InterfaceAlias Ethernet0 -Detailed
IPアドレスのコピー&ペーストは、特に静的IPを設定する場合によく行われます。IPv4アドレスのみを確認するには、以下の手順を実行してください。
(Get-NetAdapter -Name Ethernet0 | Get-NetIPAddress).IPv4Address
固定IPの設定 – DHCPが時々ダメになるから
ネットワーク アダプターに静的 IP とデフォルト ゲートウェイを指定するには、次のコマンドを実行します。
Get-NetAdapter -Name Ethernet0 | New-NetIPAddress -IPAddress 192.168.2.50 -DefaultGateway 192.168.2.1 -PrefixLength 24
または、もっと読みやすくするには、一連のパラメータを定義して、それらをすべて一度に渡します。
$ipParams = @{ InterfaceIndex = 8; IPAddress = "192.168.2.50"; PrefixLength = 24; AddressFamily = "IPv4" } New-NetIPAddress @ipParams
セカンダリIPを追加したいですか?次のコマンドを実行してください:
Set-NetIPAddress -InterfaceAlias Ethernet0 -IPAddress 192.168.2.90
DHCP の使用を停止し、IP を手動で設定する場合:
Set-NetIPInterface -InterfaceAlias Ethernet0 -Dhcp Disabled
また、必要に応じて、静的 IP を削除します (DHCP に戻す場合など)。
Remove-NetIPAddress -IPAddress "192.168.2.50"
DNSサーバー設定の変更 – デフォルトだと遅かったり間違っていたりする可能性があるため
特定の DNS サーバーを指定する場合は、次のコマンドを実行します。
Set-DNSClientServerAddress –InterfaceIndex 8 –ServerAddresses 8.8.8.8, 8.8.4.4
これは例えばGoogleのDNSサーバーを設定します。より柔軟にするには:
$dnsParams = @{ InterfaceIndex = 8; ServerAddresses = ("8.8.8.8", "8.8.4.4") } Set-DnsClientServerAddress @dnsParams
すべての DNS 設定をクリアして、DHCP 経由の自動 DNS に戻す場合は、次の操作を実行します。
Set-DnsClientServerAddress –InterfaceIndex 8 –ResetServerAddresses
特にトラブルシューティングを行う場合は、変更を行った後に DNS キャッシュをフラッシュすることを忘れないでください。
Clear-DnsClientCache
ルーティングテーブルの処理 – トラフィックが確実に経路を見つける
現在のルートを確認したい場合は、以下をご利用ください。
Get-NetRoute
具体的には、デフォルト ルート (「最後のゲートウェイ」) は次のようになります。
Get-NetAdapter -Physical | ? {$_. Status -eq "Up"} | Get-NetRoute | where DestinationPrefix -eq "0.0.0.0/0"
VPN や特別なネットワーク用に新しいルートを追加する必要がありますか? 次のコマンドを実行します:
New-NetRoute -DestinationPrefix "0.0.0.0/0" -NextHop 192.168.2.2 -InterfaceIndex 8
ルートを削除したいですか?次のコマンドを実行してください:
Remove-NetRoute -NextHop 192.168.0.1 -Confirm:$False
DHCPへの切り替え — 静的では静的すぎる場合もあるため
セットアップが乱雑な場合、または Windows に IP を再度自動的に取得させたい場合には、次の操作を行ってください。
Set-NetIPInterface -InterfaceAlias Ethernet0 -Dhcp Enabled
DNS 設定をクリアするには:
Set-DnsClientServerAddress –InterfaceAlias Ethernet0 -ResetServerAddresses
すべてをオンラインに戻して DHCP から新しい IP を取得するには、次の手順を実行します。
Restart-NetAdapter -InterfaceAlias Ethernet0
デフォルト ゲートウェイが残っている場合は、次のコマンドで手動で削除する必要があります。
Remove-NetRoute -DestinationPrefix 0.0.0.0/0 -NextHop 192.168.2.1 -Confirm:$False
緊急時には、すべてのアダプタの IPv4 設定を完全にリセットするスクリプトを作成できるので、便利です。
$adapters = Get-NetAdapter | ? {$_. Status -eq "Up"} $adapters | ForEach-Object { $interface = $_ $iface = $interface | Get-NetIPInterface -AddressFamily IPv4 if ($iface. Dhcp -eq 'Disabled') { $interface | Remove-NetRoute -Confirm:$False $interface | Set-NetIPInterface -Dhcp Enabled Set-DnsClientServerAddress -InterfaceAlias $interface. Name -ResetServerAddresses } }
複数のマシンの設定をリモートで変更する
これは少し複雑になりますが、複数のサーバーやワークステーションに構成変更をプッシュする必要がある場合に非常に便利です。WinRMまたはPowerShellリモート処理を活用したスクリプトを使ってこれを行うことができます。例えば、Active Directory OU内のすべてのWindows ServerコンピューターのDNSを更新するには、次のようなコマンドを実行します。
$Servers = Get-ADComputer -SearchBase 'OU=Servers, OU=Berlin, OU=DE, DC=woshub, DC=cpm' -Filter '(OperatingSystem -like "Windows Server*")' | Sort-Object Name ForEach ($Server in $Servers) { Invoke-Command -ComputerName $Server. Name -ScriptBlock { $newDns = @('192.168.2.11', '8.8.8.8') $adapters = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object {$_. DHCPEnabled -ne $true} $adapters | ForEach-Object { $_. SetDNSServerSearchOrder($newDns) | Out-Null } } }
はい、少し複雑ですが、ちゃんと動作します。リモートマシンでWinRMが有効になっていることと、管理者権限が正しく設定されていることを確認してください。設定によっては、スムーズに動作させるために、実行ポリシーを調整したり、PowerShellを管理者として実行したりする必要があるかもしれません。
結局のところ、一番面倒なのは、Windows 自身のネットワークスタックが時々動作しなくなったり、存在すら知らなかったアダプターが隠れてしまったりすることです。これらのコマンドレットのおかげで、何が何なのかが明確になり、何を実行すればいいのかがわかれば、固定 IP 設定や DHCP IP 設定の設定がずっと簡単になりました。もちろん、Windows は必要以上に難しくすることもあります。しかし、粘り強く取り組めば、これらのコマンドレットは数時間の節約になるでしょう。