2017-05-26 81 views
1

我正在研究用于组织多客户托管ESX环境的VM,数据存储和网络的脚本。我需要做的一件事是获取不同对象的当前位置,以查看是否需要移动它们。获取ESXi虚拟端口组的父文件夹

对于数据存储,我可以做到以下几点:

$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*"}

我还需要比较文件夹名称,看它们是否匹配,我希望他们去,所以我裹在括号行()并补充说: “请将.Name” 到最后,就像这样:

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

回答

1

什么..

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

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

+0

我根据LucD的功能尝试了这样的事情。结果不包括名称,只包括类型和值。 – McKenning

+0

多少“像这样”?因为这在我运行它时会返回文件夹名称... – TessellatingHeckler

+0

我完全按照您的命令进行操作,它只给出类型和值。这与Get-View如何返回VirtualPortGroup对象有关。这与直接获取它不同。 – McKenning