Home > Windows にまつわる e.t.c.

Windows Server 2016 の New-VMSwitch(コマンドレット仕様変わりました)


Windows Server 2012 R2 では、仮想スイッチを PowerShell で作る場合、Get-NetAdapter を New-VMSwitch にリダイレクトできていましたが、Windows Server 2016 では同様なリダイレクトが出来ないようになっています。

PS C:\> Get-NetAdapter

Name                      InterfaceDescription                    ifIndex Status       MacAddress             LinkSpeed
----                      --------------------                    ------- ------       ----------             ---------
イーサネット 3            Intel(R) Ethernet Server Adapter I...#3       2 Disconnected 00-1B-21-A6-6D-FF          0 bps
イーサネット 2            Intel(R) Ethernet Server Adapter I...#2       6 Up           00-1B-21-A6-6D-FE         1 Gbps
イーサネット 4            Intel(R) Ethernet Server Adapter I...#4       5 Up           00-1B-21-A6-6D-FD         1 Gbps
イーサネット              Intel(R) Ethernet Server Adapter I34...       8 Up           00-1B-21-A6-6D-FC         1 Gbps


PS C:\> Get-NetAdapter | ? MacAddress -eq "00-1B-21-A6-6D-FD" | New-VMSwitch -AllowManagementOS:$False -Name "Test-Switch"
New-VMSwitch : パラメーター 'ComputerName の引数を確認できません。引数が null または空です。null または空でない引数を指定して、コ
マンドを再度実行してください。
発生場所 行:1 文字:58
+ ... A6-6D-FD" | New-VMSwitch -AllowManagementOS:$False -Name "Test-Switch ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (MSFT_NetAdapter...Name = "wsv12"):PSObject) [New-VMSwitch]、ParameterBindingValidatio
    nException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.HyperV.PowerShell.Commands.NewVMSwitch

PS C:\>

 

Windows Server 2016 の New-VMSwitch の物理 NIC 特定は、-ComputerName localhost を明示的に指定するか、-NetAdapterName で Name を指定する必要があります。

-ComputerName localhost を明示的に指定するのならこんな感じ

Get-NetAdapter | ? MacAddress -eq "00-1B-21-A6-6D-FD" | New-VMSwitch -ComputerName localhost -AllowManagementOS:$False -Name "Test-Switch"

 

-NetAdapterName で Name を指定する場合

# ターゲット NIC(MAC Address 使っていますが、ifIndex でも OK)
$TergetNIC = Get-NetAdapter | ? MacAddress -eq "00-1B-21-A6-6D-FD"

# ターゲット NIC の名前
$TergetNICName = $TergetNIC.Name

# NIC 名を指定して 仮想 SW 作成する場合
New-VMSwitch -NetAdapterName $TergetNICName -AllowManagementOS:$False -Name "Test-Switch"

 

ワンライナーで書くとこんな感じです

Get-NetAdapter | ? MacAddress -eq "00-1B-21-A6-6D-FD" | % {New-VMSwitch -NetAdapterName $_.Name -AllowManagementOS:$False -Name "Test-Switch"}

 

 

NIC 名を変更した後に仮想スイッチを作成する

複数 NIC を持っている場合は、NIC 名を変更して管理する事が多いので、変更後の NIC 名を使用すると良いかもしれません。

# NIC 名設定
Get-NetAdapter | ? MacAddress -eq "00-1B-21-A6-6D-FD" | Rename-NetAdapter -NewName "Test-NIC"

# NIC 名を指定して仮想スイッチ作成
New-VMSwitch -NetAdapterName "Test-NIC" -AllowManagementOS:$False -Name "Test-Switch"

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.