Azure PowerShell return CustomScriptExtension 的名称(如果存在)

Azure PowerShell return the Name of CustomScriptExtension if it exists

我创建了一个名为 $VMStatus

的变量
$VMStatus = Get-AzureRmVM -ResourceGroupName $RGName -VMName $VMName -status

现在当我 运行 $VMStatus.Extensions.Type 时,它 return 是所提供条目的虚拟机扩展列表。

所以现在当我 运行 $VMStatus.Extensions.Type -Match "Custom" 时,它 return 是我感兴趣的条目:Microsoft.Compute.CustomScriptExtension

我遇到的问题是获取 CustomScriptExtensionName。我尝试了以下但没有成功:

IF ($VMstatus.Extensions.Type -Match "Custom") {$VMstatus.Extensions.Name}

这实际上 return Name 的所有条目,因为 IF 语句的第一部分是 TRUE

如何 return 仅 CustomrScriptExtensionName(如果存在)?

您可以尝试使用以下脚本。

##If VirtualMachineExtensionType eq CustomScriptExtension, it means custom script extension install on your VM
$vm=Get-AzureRmVm -ResourceGroupName $RGName -Name $VMName |Where {$_.Extensions.VirtualMachineExtensionType -eq "CustomScriptExtension"}
if ($vm){

    $name = $vm.Extensions|Where {$_.VirtualMachineExtensionType -eq "CustomScriptExtension"} |select Name
    $name
}

感谢@shengbao-shui-msft提供以上答案。 我采纳了他的建议并将其修改为首先查找 CustomScriptExtension,如果存在则将其移除,然后再继续运行手册

$VM = Get-AzureRMVM -ResourceGroupName $RGName -Name $VMName | Where-Object {$_.Extensions.VirtualMachineExtensionType -eq "CustomScriptExtension"}
IF ($vm) 
{
    $name = $vm.Extensions | Where-Object {$_.VirtualMachineExtensionType -eq "CustomScriptExtension"} | select-object -ExpandProperty Name
    write-host "Existing CustomScriptExtension found on $VMName as $name . Removing...."

    Remove-AzureRmVMCustomScriptExtension `
    -VMName $VMName `
    -ResourceGroupName $RGName `
    -Name $name
}
Else 
{
    write-host "There are no CustomScriptExtension found on $VMName . "
}