获取 ESXi 虚拟端口组的父文件夹

Get the parent folder for an ESXi virtual port group

我正在编写一个脚本来为多客户托管的 ESX 环境组织虚拟机、数据存储和网络。我需要做的一件事是获取不同对象的当前位置,以查看它们是否需要移动。

对于数据存储,我可以执行以下操作:

$currentFolder = (Get-Datastore $datastore).ParentFolder.Name

对于网络,它的工作方式不同:

$currentFolder = (Get-VirtualPortGroup -VMHost $esxhost -Name $network).ParentFolder.Name

这不会 return 任何结果,因为 VirtualPortGroup 对象上没有 "ParentFolder" 属性。

我的问题是:还有其他方法可以获取 VirtualPortGroup 的父文件夹名称吗?

答案:以下代码作为单行代码工作:

Get-Folder -Id (Get-View -ViewType Network -Filter @{'Name' = $network}).Parent

我必须创建一个条件来过滤多个网络名称,因为网络也存在于 vDS 上。我通过将 Get-View 命令传递给:

来完成此操作

Where {$_.Name -like "*$criteria*"}

我还需要比较文件夹名称以查看它们是否与我希望它们去的地方相匹配,所以我用括号 () 包裹了这一行并在末尾添加了“.Name”,如下所示:

(Get-Folder -Id (Get-View -ViewType Network -Filter @{'Name' = $network} | Where {$_.Name -like "*$criteria*"}).Parent).Name

那..

$NetworkView = Get-View -ViewType Network -Filter @{'Name' = 'TestVLAN' }
$PortGroupFolder = Get-Folder -Id $NetworkView.Parent

?

我怀疑它与多次存在的 VirtualPortGroup 有关 - 在每个 ESXi 主机/每个 VirtualSwitch 上一次 - 但 'network' 只在 vCenter 上出现一次,这就是放入文件夹的内容。我猜,如果你有分布式交换机,这可能会有所不同。