使用以下脚本检索VM的 NAME和PATH ,并在 PATH 中获取我不想要的全长路径,我只需要在输出
中的资源之后显示的路径这是我的代码:
function Get-Path{
param($Object)
$path = $object.Name
$parent = Get-View $Object.ExtensionData.ResourcePool
while($parent){
$path = $parent.Name + "/" + $path
if($parent.Parent){
$parent = Get-View $parent.Parent
}
else{$parent = $null}
}
$path
}
Get-VM | Select Name,
@{N="Path";E={Get-Path -Object $_}}
输出:
名称:
AWServer 3.1
CCW%.1.1_DEMO
DEMO-EA
MUSE_DEMO
UV_CARDIO
UView-Web_Cardio-2015-v2
路径:
> ha-folder-root/ha-datacenter/host/tempcardio.centricity.info/Resources/vbnrt735w6%5c/sdfasd34564/AWServer
> 3.1 ha-folder-root/ha-datacenter/host/tempcardio.centricity.info/Resources/CCW5.1.1_DEMO
> ha-folder-root/ha-datacenter/host/tempcardio.centricity.info/Resources/4564/DEMO-EA
> ha-folder-root/ha-datacenter/host/tempcardio.centricity.info/Resources/vbnrt735w6%5c/MUSE_DEMO
> ha-folder-root/ha-datacenter/host/tempcardio.centricity.info/Resources/asd/UV_CARDIO
> ha-folder-root/ha-datacenter/host/tempcardio.centricity.info/Resources/UView-Web_Cardio_2015_v2
答案 0 :(得分:1)
如果文本面前并包含“资源”是多余的,那么使用简单的正则表达式我们可以在从函数输出之前替换它。
从$path
到$path -replace "^.*?Resources/"
这样就可以替换函数内部的类似行(返回属性的位置)。我们从字符串一直到包括第一次出现的所有内容“Resources /".
另一种方法是编辑get-path
的输出,该输出与函数名称一致
Get-VM | Select Name,
@{N="Path";E={(Get-Path -Object $_) -replace "^.*?Resources/"`}}