【发布时间】:2017-10-27 18:45:15
【问题描述】:
我正在编写一个脚本来为多客户托管的 ESX 环境组织虚拟机、数据存储和网络。我需要做的一件事是获取不同对象的当前位置以查看它们是否需要移动。
对于数据存储,我可以执行以下操作:
$currentFolder = (Get-Datastore $datastore).ParentFolder.Name
对于网络,它不一样:
$currentFolder = (Get-VirtualPortGroup -VMHost $esxhost -Name $network).ParentFolder.Name
这不会返回任何结果,因为 VirtualPortGroup 对象上没有“ParentFolder”属性。
我的问题是:还有其他方法可以获取 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
【问题讨论】:
标签: powershell powercli esxi