PowerShell批量管理虚拟交换机需用New-VMSwitch、Get-VMSwitch、Set-VMSwitch和Remove-VMSwitch四命令,以管理员身份运行,禁止直接删改正在使用的交换机。
powershell 批量管理虚拟交换机配置,核心是用 new-vmswitch、get-vmswitch、set-vmswitch 和 remove-vmswitch 这四个命令统一操作,适用于创建、查询、修改和清理多个交换机。所有操作必须以管理员身份运行,且不支持对正在被虚拟机使用的交换机直接删除或重命名。
批量创建虚拟交换机
适合首次部署或标准化环境初始化。可一次定义多个交换机类型(External、Internal、Private),并自动处理网卡绑定与共享选项:
- 创建外部交换机并允许主机共享:
New-VMSwitch -Name "Prod-External" -NetAdapterName "Ethernet" -AllowManagementOS $true -SwitchType External - 批量建多个内部交换机(如按业务线):
$switches = @("Dev-Internal", "Test-Internal", "CI-Internal"); $switches | ForEach-Object { New-VMSwitch -Name $_ -SwitchType Internal } - 注意:
-AllowManagementOS $true会临时中断主机网络,建议在维护窗口执行;若省略该参数,主机将无法通过此交换机通信。
批量查询与筛选交换机信息
用于资产盘点、合规检查或为后续配置提供输入。可按类型、名称模式或是否启用管理共享进行过滤:
通过 SSH 隧道从 Android 设备在互联网上对 Windows PC 实现完整远程控制的设置与使用指南,适用于远程桌面访问、安全 RDP 等。
- 列出所有外部交换机及其网卡绑定状态:
Get-VMSwitch | Where-Object {$_.SwitchType -eq 'External'} | Select-Object Name, NetAdapterInterfaceDescription, AllowManagementOS - 导出全部交换机基础信息到 CSV:
Get-VMSwitch | Select-Object Name, SwitchType, AllowManagementOS, IovEnabled | Export-Csv "C:\switch-report.csv" -NoTypeInformation - 检查是否存在未被任何 VM 使用的闲置交换机(需配合
Get-VMNetworkAdapter关联分析):$usedSwitches = Get-VM | Get-VMNetworkAdapter | Select-Object -ExpandProperty SwitchName -Unique; Get-VMSwitch | Where-Object {$_.Name -notin $usedSwitches}
批量修改交换机属性
目前 PowerShell 支持批量调整的配置项有限,主要集中在 SR-IOV 和 IOV 相关设置。其他如名称、类型、绑定网卡等不可更改,需删后重建:
- 为所有外部交换机启用 SR-IOV(需硬件支持):
Get-VMSwitch | Where-Object {$_.SwitchType -eq 'External'} | Set-VMSwitch -IovEnabled $true - 禁用某类交换机的嵌套虚拟化转发(仅第2代VM有效):
Get-VMSwitch -Name "*Test*" | Set-VMSwitch -EnableEmbeddedTeaming $false - 注意:
Set-VMSwitch不支持修改-NetAdapterName或-AllowManagementOS,若需调整,应先Remove-VMSwitch再重建。
批量清理未使用交换机
避免配置冗余和安全风险。关键逻辑是确认无 VM 正在使用,再执行删除:
- 安全删除名称含 “Temp” 且未被任何 VM 引用的交换机:
$tempSwitches = Get-VMSwitch -Name "*Temp*"; foreach ($s in $tempSwitches) { if (-not (Get-VM | Get-VMNetworkAdapter | Where-Object {$_.SwitchName -eq $s.Name})) { Remove-VMSwitch -Name $s.Name -Force } } - 删除前建议先导出待删列表验证:
Get-VMSwitch -Name "*Old*" | Select-Object Name, SwitchType, @{n='UsedByVM';e={@($(Get-VM | Get-VMNetworkAdapter | Where-Object {$_.SwitchName -eq $_.Name})).Count}} | Where-Object {$_.UsedByVM -eq 0} - 删除操作不可逆,
-Force参数跳过确认提示,生产环境务必先人工核对。

















