我正在编写一个脚本来为多客户托管的ESX环境组织VM,数据存储和网络。我需要做的一件事就是获取不同对象的当前位置,看看是否需要移动它们。
对于数据存储,我可以执行以下操作:
$currentFolder = (Get-Datastore $datastore).ParentFolder.Name
对于网络而言,它的工作原理并不相同:
$currentFolder = (Get-VirtualPortGroup -VMHost $esxhost -Name $network).ParentFolder.Name
这不会返回任何结果,因为没有" ParentFolder" VirtualPortGroup对象上的属性。
我的问题是:是否有其他方法可以获取VirtualPortGroup的父文件夹名称?
答案:以下代码作为一行代码:
Get-Folder -Id (Get-View -ViewType Network -Filter @{'Name' = $network}).Parent
我必须创建一个标准来过滤多个网络名称,因为网络也存在于vDS上。我通过将Get-View命令传递给:
来完成此操作 Where {$_.Name -like "*$criteria*"}
我还需要比较文件夹名称以查看它们是否与我希望它们匹配的位置匹配,因此我将这些行包装在parens()中并添加了" .Name"到最后,像这样:
(Get-Folder -Id (Get-View -ViewType Network -Filter @{'Name' = $network} | Where {$_.Name -like "*$criteria*"}).Parent).Name
答案 0 :(得分:1)
怎么样..
$NetworkView = Get-View -ViewType Network -Filter @{'Name' = 'TestVLAN' }
$PortGroupFolder = Get-Folder -Id $NetworkView.Parent
我怀疑它与VirtualPortGroup存在多次相关 - 一次在每个ESXi主机/每个VirtualSwitch上 - 但“网络”仅在vCenter上显示一次,这就是放入文件夹的内容。如果你有分布式交换机,我可能会有所不同。