缩短Powershell cmdlet输出属性结果

时间:2019-01-07 16:27:50

标签: powershell

我在Powershell中有一个示例查询;

Get-AzureRmDisk -ResourceGroupName $resourceGroupName | 
Format-Table -Property Name, Managed By

结果

Name      : OsDisk_1_dfa60a
ManagedBy : /subscriptions/resourceGroups/Company/Microsoft.Compute/vms/Server1

“属性”管理的输出太长。 我想将其缩短为最后一个/之后的字符(正斜杠) 预期结果

Name      : OsDisk_1_dfa60a
ManagedBy : Server1

到目前为止,我已经尝试过使用子字符串,并且使用上一个索引of来计算“ /”的索引,并在此开始子字符串,然后以ManagedBy属性字符串的全长结束子字符串;

Get-AzureRmDisk -ResourceGroupName $resourceGroupName | 
Format-List -Property Name, 
ManagedBy.SubString(ManagedBy.LastIndexOf('/'),ManagedBy.length)

随后发生错误:ManagedBy.LastIndexOf:术语'ManagedBy.LastIndexOf'不被识别为cmdlet,函数,脚本文件的名称,


解决方案

   Get-AzureRmDisk -ResourceGroupName $resourceGroupName | 
Format-Table -Property Name, 
@{Name='ManagedBy';Expr={$_.ManagedBy.Split('/')[-1]}} 

2 个答案:

答案 0 :(得分:2)

这应该给您您想要的...

Format-List -Property Name, 
@{Name='ManagedBy';Expr={$_.ManagedBy.Split('/')[-1]}}

答案 1 :(得分:0)

如果...

$ManagedBy = "/subscriptions/resourceGroups/Company/Microsoft.Compute/vms/Server1"

然后...

$LastResult = $ManagedBy.Split("/")[$ManagedBy.Split("/").Length - 1]

哪个仅返回数组中的最后一个值,在本例中为Server1。数组从0(零)位置开始,因此您只需从数组Length的末端开始走1步。

在这种情况下,请将ManagedBy属性更改为$LastResult的值,您应该可以将其合并到其余代码中。