2011年11月15日火曜日

Powershellでネットワーク設定を行う

ネットワーク設定を自動化したい場合は、Powershellスクリプトで簡単に実現することができます。

基本的にWin32_NetworkAdapterConfigurationというWMIオブジェクトを使います。Win32_NetworkAdapterConfigurationを使用することによって、各ネットワークアダプターの情報を取得したり、静的なIPアドレス、ディフォルゲートウェイ、DNSなどの設定を行ったりすることができます。

Powershellコマンドプロンプトで下記のコマンドを実行すると、すべてのネットワークアダプターの関連情報が表示されます。

Get-WmiObject Win32_NetworkAdapterConfiguration

そして、Get-WmiObject Win32_NetworkAdapterConfiguration | Get-Memberを実行すると、ネットワークアダプターというオブジェクトのProperty、操作できるMethodなどの情報も表示されます。これらの情報は、Powershellスクリプトを書く時に非常に役に立つと思います。

win32_network

 

簡単にPowershellスクリプトを作成してみました。

$description = "Intel(R) 82567LM Gigabit Network Connection"
$ip = "192.168.1.100"
$subnet = "255.255.255.0"
$gateway = "192.168.1.254"
$dns = @("192.168.1.1";"192.168.1.2")

$adapter = Get-WmiObject Win32_NetworkAdapterConfiguration | Where {$_.Description -eq $description}
$adapter.EnableStatic($ip,$subnet)
$adapter.SetGateways($gateway)
$adapter.SetDNSServerSearchOrder($dns)

上記のコードを一個の.ps1ファイル(例:ConfigureNetwork.ps1)として保存します。Powershellコマンドプロンプトを「管理者として実行」で起動し、ConfigureNetwork.ps1を実行すればいいです。

【コード解説】

$adapter = Get-WmiObject Win32_NetworkAdapterConfiguration | Where {$_.Description -eq $description}

この一行は設定しようとするネットワークアダプターを特定するためのコードです。ネットワークアダプターは”説明($description)”というPropertyで判断されます。$descriptionは下記の図の青い部分になります。

description

ほかにもいろいろ条件を指定して判断することもできます、わかりやすい属性を選ぶと良いでしょう。

Windows Server 2012 Hyper-V Cookbook

新品価格
¥4,330から
(2012/12/20 20:55時点)

Windows PowerShellクックブック

新品価格
¥4,200から
(2012/12/20 21:06時点)

サーバ/インフラエンジニア養成読本 仮想化活用編 [クラウドな現場で役立つ知恵と知識が満載!] (Software Design plus)

新品価格
¥2,079から
(2012/12/20 20:58時点)