デバイスの「場所」情報に基づくNICのリネーム

Windowsは、接続されているNICに「ローカル エリア接続 xx」という名前を付けて管理をしますが、この名前付けはランダムであり、同じ構成のマシンを同時にインストールしてても違う名前が付いたりします。

 

通常は、インストール中に接続されている物理ポートに応じて名前を付けたり並び替えたりするのですが、複数のNICを有しているサーバ機では結構その作業が面倒です。Linuxの様にMACアドレスで特定するにも、インストール前に特定するのは難しいです。そこで、PCIバスの番号や機能などによりポートを特定して並び替えるPowerShellスクリプトを作ってみました。(実行には管理者権限で実行する必要があります)

function rename-nic($i, $j ,$k ,$x) {
    $newname = "$x"
    $location = "PCI bus $i, device $j, function $k"
    $location_jp = "PCI バス $i, デバイス $j, 機能 $k"
    $drvinfo = (Get-WmiObject Win32_PnPSignedDriver | Where-Object {$_.Location -eq $location -or $_.Location -eq $location_jp}).DeviceID
    $nic = Get-WmiObject Win32_NetworkAdapter | Where-Object {$_.PNPDeviceID -eq $drvinfo}
    $oldname = $nic.NetConnectionID
    if ($oldname -eq "$newname") {
        write-host "既に指定された名前になっています"
    }
    elseif ($newname -eq '') {
        write-host "新しい名前を指定して下さい"
    }
    elseif ($oldname -eq '') {
        write-host "指定されたバスにNICが見つかりません"
    }
    else {
        write-host "NIC名変更: $oldname => $newname"
        $nic.NetConnectionID = $newname
        $nic.Put()
    }
}

$model = (Get-WmiObject Win32_ComputerSystem).Model

if ($model -eq "PRIMERGY RX200 S6             ") {
    write-host "Fujitsu PRIMERGY RX200 S6のNIC名を変更を実行します"
    rename-nic "1" "0" "0" "ローカルエリア接続1"
    rename-nic "1" "0" "1" "ローカルエリア接続2"
    rename-nic "4" "0" "0" "ローカルエリア接続3"
    rename-nic "4" "0" "1" "ローカルエリア接続4"
    rename-nic "4" "0" "2" "ローカルエリア接続5"
    rename-nic "4" "0" "3" "ローカルエリア接続6"
    rename-nic "3" "0" "3" "ローカルエリア接続7"
    rename-nic "3" "0" "2" "ローカルエリア接続8"
    rename-nic "3" "0" "1" "ローカルエリア接続9"
    rename-nic "3" "0" "0" "ローカルエリア接続10"
}

サンプルとして、富士通の1UサーバにQUADポートの増設NICを2枚刺した物をベースに作りました。(PCIバスの3番と4番は片方がLPになっていて指す方向が逆なので機能番号が逆順になっています)

各マシンやNICごとに、rename-nic関数の引数を変えて行けば使い回しできそうですね。