PowerShellでネットワークアダプターを設定する方法:IPアドレス・DNS・デフォルトゲートウェイ・静的ルートの構成
本記事では、Windowsのネットワークアダプター設定をPowerShellから構成する方法を詳しく解説します。静的なIPアドレスやDNSサーバー(ネームサーバー)の取得・設定方法、ネットワークインターフェースをDHCPサーバーからIP設定を自動取得するように構成する手順までを取り上げます。これらのコマンドレットは、Windows ServerのCore/NanoエディションやHyper-V Serverでのネットワーク構成、リモートコンピューターやサーバーのIP設定変更、そしてPowerShellスクリプトへの組み込みなど、幅広いシーンで活用できます。
以前はCLIからWindowsのネットワーク設定を行う際に netsh interface ipv4 コマンドが使われていましたが、PowerShell 3.0以降では、標準搭載された NetTCPIP モジュールを使用してネットワーク設定を管理できます。
このモジュールに含まれるコマンドレットの一覧を表示するには、次のコマンドを実行します。
Get-Command -Module NetTCPIP
なお、このモジュールには Test-NetConnection コマンドレットも含まれており、リモートコンピューター上のTCPポートの疎通確認にも利用できます。
PowerShellによるネットワークアダプターの管理
コンピューター上で利用可能なネットワークインターフェースの一覧を表示します。
Get-NetAdapter
このコマンドレットは、インターフェース名、状態(Up/Down)、MACアドレス、ポート速度を返します。
例として、物理接続の Ethernet0 以外に、Hyper-V や VMware Player の仮想ネットワークインターフェースなど、複数のアダプターが存在する環境を想定します。
ネットワークインターフェースは、名前またはインデックス番号(Index 列)で指定できます。この例で物理LANアダプター「Intel 82574L」を選択するには、次のコマンドを使用します。
Get-NetAdapter -Name "Ethernet0"
または、インデックス番号での指定も可能です。
Get-NetAdapter -InterfaceIndex 8
アダプター名の変更と有効化・無効化
アダプター名を変更するには、次のように実行します。
Rename-NetAdapter -Name Ethernet0 -NewName LAN
ネットワークインターフェースを無効化するコマンドは以下のとおりです。
Get-NetAdapter -InterfaceIndex 13 | Disable-NetAdapter
インターフェースを有効化する場合、インデックス番号はまだ割り当てられていないため使用できません。代わりにアダプター名または説明(Description)を指定します。
Enable-NetAdapter -InterfaceDescription "Hyper-V Virtual Ethernet Adapter"
VLAN IDとドライバー情報の確認
アダプターにVLANが設定されている場合は、次のコマンドで表示できます。
Get-NetAdapter | ft Name, Status, Linkspeed, VlanID
使用中のネットワークアダプタードライバーに関する情報を取得するには、以下を実行します。
Get-NetAdapter | ft Name, DriverName, DriverVersion, DriverInformation, DriverFileName
PCIスロットやバス情報など、物理ネットワークアダプターのハードウェア情報を確認する場合はこちらです。
Get-NetAdapterHardwareInfo
PowerShellでTCP/IPネットワークアダプター設定を確認する方法
現在のネットワークアダプター設定(IPアドレス、DNS、デフォルトゲートウェイ)を取得するには、次のコマンドを使用します。
Get-NetIPConfiguration -InterfaceAlias Ethernet0
現在のTCP/IP構成についてより詳細な情報を表示するには、-Detailed パラメーターを付けて実行します。
Get-NetIPConfiguration -InterfaceAlias Ethernet0 -Detailed
この場合、インターフェースに割り当てられたネットワークプロファイル(NetProfile.NetworkCategory)、MTU設定(NetIPv4Interface.NlMTU)、DHCPからのIPアドレス取得が有効かどうか(NetIPv4Interface.DHCP)など、役立つ情報が表示されます。
インターフェースのIPv4アドレスのみを取得したい場合は、次のようにします。
(Get-NetAdapter -Name ethernet0 | Get-NetIPAddress).IPv4Address
PowerShellで静的IPアドレスを設定する方法
ここでは、NICに静的IPアドレスを設定してみましょう。ネットワークインターフェースのIPアドレス、サブネットマスク、デフォルトゲートウェイを変更するには、次のコマンドを使用します。
New-NetIPAddress -IPAddress 192.168.2.50 -DefaultGateway 192.168.2.1 -PrefixLength 24 -InterfaceIndex 8
配列(ハッシュテーブル)形式を使うと、より視覚的にパラメーターを指定できます。
$ipParams = @{
InterfaceIndex = 8
IPAddress = "192.168.2.50"
PrefixLength = 24
AddressFamily = "IPv4"
}
New-NetIPAddress @ipParams
New-NetIPAddress コマンドレットを使えば、ネットワークアダプターにセカンダリIPアドレス(エイリアス)を追加することも可能です。
すでに静的IPアドレスが設定されていて、それを変更したい場合は Set-NetIPAddress コマンドレットを使用します。
Set-NetIPAddress -InterfaceIndex 8 -IPAddress 192.168.2.90
アダプターがDHCPからIPアドレスを取得しないようにするには、次のコマンドを実行します。
Set-NetIPInterface -InterfaceAlias Ethernet0 -Dhcp Disabled
ルーティングテーブルの操作とIPv6の無効化
ルーティングテーブルの表示には Get-NetRoute コマンドレットを使用し、新しいルートの追加には New-NetRoute コマンドレットを使用します。
New-NetRoute -DestinationPrefix "0.0.0.0/0" -NextHop "192.168.2.2" -InterfaceIndex 8
ネットワークアダプターでIPv6プロトコルを無効化するには、以下を実行します。
Get-NetAdapterBinding -InterfaceAlias Ethernet0 | Set-NetAdapterBinding -Enabled:$false -ComponentID ms_tcpip6
Set-DnsClientServerAddress:プライマリDNS・セカンダリDNSサーバーアドレスの設定
WindowsでプライマリおよびセカンダリDNSサーバーのIPアドレスを設定するには、Set-DNSClientServerAddress コマンドレットを使用します。たとえば、次のように実行します。
Set-DNSClientServerAddress -InterfaceIndex 8 -ServerAddresses 192.168.2.11,10.1.2.11
ハッシュテーブル形式でネームサーバーを指定することもできます。
$dnsParams = @{
InterfaceIndex = 8
ServerAddresses = ("8.8.8.8","8.8.4.4")
}
Set-DnsClientServerAddress @dnsParams
DNS設定を変更した後は、DNSリゾルバーキャッシュをクリアしておくとよいでしょう。
Clear-DnsClientCache
PowerShellで静的IPアドレスからDHCPへ変更する方法
ネットワークアダプターがDHCPサーバーから動的にIPアドレスを取得できるようにするには、次のコマンドを実行します。
Set-NetIPInterface -InterfaceAlias Ethernet0 -Dhcp Enabled
DNSサーバーの設定をクリアします。
Set-DnsClientServerAddress -InterfaceIndex 8 -ResetServerAddresses
その後、アダプターを再起動して、DHCPサーバーからIPアドレスを自動的に取得させます。
Restart-NetAdapter -InterfaceAlias Ethernet0
以前にデフォルトゲートウェイを設定していた場合は、削除しておきます。
Set-NetIPInterface -InterfaceAlias Ethernet0 | Remove-NetRoute -Confirm:$false
PowerShellでリモートからIPアドレスとDNS設定を変更する方法
PowerShellを使えば、複数のリモートコンピューターに対してIPアドレスやDNSサーバー設定を一括で変更できます。たとえば、「特定のADコンテナー(組織単位:OU)内のすべてのサーバーのDNS設定を変更する」というタスクを考えてみましょう。以下のスクリプトでは、Get-ADComputer コマンドレットで対象コンピューターの一覧を取得し、WinRM経由でリモート接続(Invoke-Command コマンドレット)して設定を変更しています。
$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) {
Write-Host "Server $($Server.Name)"
Invoke-Command -ComputerName $Server.Name -ScriptBlock {
$NewDnsServerSearchOrder = "192.168.2.11","8.8.8.8"
$Adapters = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object {$_.DHCPEnabled -ne 'True' -and $_.DNSServerSearchOrder -ne $null}
Write-Host "Old DNS settings: "
$Adapters | ForEach-Object {$_.DNSServerSearchOrder}
$Adapters | ForEach-Object {$_.SetDNSServerSearchOrder($NewDnsServerSearchOrder)} | Out-Null
$Adapters = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object {$_.DHCPEnabled -ne 'True' -and $_.DNSServerSearchOrder -ne $null}
Write-Host "New DNS settings: "
$Adapters | ForEach-Object {$_.DNSServerSearchOrder}
}
}
このスクリプトは、DHCPが無効でDNSサーバーが設定されているアダプターのみを対象に処理を行い、変更前後のDNS設定を出力してくれるため、大規模環境でのDNS移行作業などを安全かつ効率的に実施できます。
-
Windows 10で「デフォルトゲートウェイが利用できません」エラーを解決する5つの方法
Wi-Fiでインターネットに接続しようとした際に「制限付きアクセス」と表示され、ネットワークトラブルシューティングツールを実行すると「デフォルトゲートウェイが利用できません」というエラーが出てしまうことはありませんか?この状態では、タスクトレイのWi-Fiアイコンに黄色い感嘆符が表示され、問題を解決するまでインターネットにアクセスできなくなります。このエラーの主な原因は、破損している、または互換性のないネットワークアダプタードライバーです。また、マルウェアやウイルス感染が原因となるケースもあるため、根本的なトラブルシューティングが必要です。この記事では、Windows 10で「デフォルトゲート
-
Windows 10でDNS設定を変更する3つの方法【初心者向けにわかりやすく解説】
DNSとは何か、どのように動作するのか? DNSは「Domain Name System(ドメインネームシステム)」の略で、ドメインネームサーバー、ドメインネームサービスと呼ばれることもあります。DNSは現代のネットワークの基盤となる存在です。 今日の世界では、私たちの周りに膨大な数のコンピュータが存在し、インターネットは何百万台ものコンピュータが互いに接続された巨大なネットワークです。このネットワークは、効率的なコミュニケーションや情報伝送に大きく貢献しています。すべてのコンピュータはIPアドレスを使って通信しており、このIPアドレスはネットワーク上に存在するすべての機器に割り当てられた固有