Powershell 从Get-VMSwitch获取NetAdapter

Powershell 从Get-VMSwitch获取NetAdapter,powershell,hyper-v,Powershell,Hyper V,我想通过Powershell检索Hyper-V虚拟交换机使用的网络适配器 目前的调查: Get-VMSwitch | Select-Object NetAdapterInterfaceGuid {9894bc20-46fe-4b77-8ba8-6fd49d475dbe} UUID匹配,但格式不同 当我尝试向Get NetAdapter命令提供vSwitch NetAdapter UUID时,出现了一个数据格式异常 Get-VMSwitch | ForEach-Object {$_ | add-

我想通过Powershell检索Hyper-V虚拟交换机使用的网络适配器

目前的调查:

Get-VMSwitch | Select-Object NetAdapterInterfaceGuid
{9894bc20-46fe-4b77-8ba8-6fd49d475dbe}
UUID匹配,但格式不同

当我尝试向Get NetAdapter命令提供vSwitch NetAdapter UUID时,出现了一个数据格式异常

Get-VMSwitch | ForEach-Object {$_ | add-member -MemberType NoteProperty -PassThru -Name networkInterfaces -Value @(Get-NetAdapter -InterfaceIndex $_.NetAdapterInterfaceGuid)} | select-object Id,Name,networkInterfaces
Cannot process argument transformation on parameter 'InterfaceIndex'. Cannot convert the
"9894bc20-46fe-4b77-8ba8-6fd49d475dbe" value of type "System.Guid" to type "System.UInt32".
是否有方法将System.Guid转换为System.UInt32,或者有其他方法从Hyper-V vSwitch检索网络适配器

[System.Guid[]] $occupiedNetAdaterGuids = Get-VMSwitch | Select-Object -ExpandProperty NetAdapterInterfaceGuid
Get-NetAdapter | Where-Object {$occupiedNetAdaterGuids -contains $_.InterfaceGuid}
第一行获取所有VM交换机,提取VM交换机绑定到的网络适配器的
GUID
,并将这些网络适配器
GUID
存储到一个数组中

第二行获取所有网络适配器并将它们导入一个过滤器,该过滤器将删除没有绑定VM交换机的适配器

笔记 在PowerShell中,确保类型安全性非常重要,尤其是对于阵列。PowerShell不是强类型语言。
[System.Guid[]
确保当返回一个Guid时,
Get-VMSwitch
的输出被转换为数组事件

ExpandProperty
提取属性的值,因此不返回
PSCustomObject
,只返回值本身

将条件从
-contains
更改为
-notcontains
可反转结果。它将返回Hyper-V VM交换机未使用的适配器

第一行获取所有VM交换机,提取VM交换机绑定到的网络适配器的
GUID
,并将这些网络适配器
GUID
存储到一个数组中

第二行获取所有网络适配器并将它们导入一个过滤器,该过滤器将删除没有绑定VM交换机的适配器

笔记 在PowerShell中,确保类型安全性非常重要,尤其是对于阵列。PowerShell不是强类型语言。
[System.Guid[]
确保当返回一个Guid时,
Get-VMSwitch
的输出被转换为数组事件

ExpandProperty
提取属性的值,因此不返回
PSCustomObject
,只返回值本身


将条件从
-contains
更改为
-notcontains
可反转结果。它将返回Hyper-V VM交换机未使用的适配器。

感谢您提供答案。请编辑您的答案,包括对代码的解释,好吗?这将有助于未来的读者更好地理解正在发生的事情,尤其是那些对该语言不熟悉、难以理解其概念的社区成员。@sta更新了答案。顺便说一句:你的个人资料中有一个类型。引自R.里根,而非里根。谢谢你的回答。请编辑您的答案,包括对代码的解释,好吗?这将有助于未来的读者更好地理解正在发生的事情,尤其是那些对该语言不熟悉、难以理解其概念的社区成员。@sta更新了答案。顺便说一句:你的个人资料中有一个类型。引自R.里根,而非里根。
[System.Guid[]] $occupiedNetAdaterGuids = Get-VMSwitch | Select-Object -ExpandProperty NetAdapterInterfaceGuid
Get-NetAdapter | Where-Object {$occupiedNetAdaterGuids -contains $_.InterfaceGuid}