通过CLI从Azure从VM提取多个参数(代码不起作用)

pftdvrlh  于 2023-04-22  发布在  其他
关注(0)|答案(1)|浏览(73)

我正在尝试通过CLI收集有关VM的信息,以便比通过Azure Portal更快地获取这些信息。我正在尝试提取给定VM的vnet、子网和路由表。但这是我第一次使用CLI,我的代码不起作用。我已暂时禁用登录/注销和VM名称的输入。
错误发生在$vnetId = (Get-AzNetworkInterface -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName).IpConfigurations[0].Subnet.Id.Split("/")[-3]
我收到以下错误消息:”
Get-AzNetworkInterface:找不到资源组“RG-REDISPATCHPROD-PROD-001”下的资源“Microsoft.Network/networkInterfaces/vmva 2015”。有关详细信息,请转到https://aka.ms/ARMResourceNotFoundFix StatusCode:404 ReasonPhrase:错误代码:ResourceNotFound“
我已经力不从心了,需要帮助。

# Importieren der benötigten Az-Module
Import-Module Az.Accounts
Import-Module Az.Network
Import-Module Az.Compute
Import-Module Az.Resources
Import-Module Az.DesktopVirtualization

# Anmelden bei Azure
    #Connect-AzAccount

# Eingabeaufforderung für den VM-Namen anzeigen
    #$vmName = Read-Host "Geben Sie den Namen der VM ein: "
$vmName = "vmva2015" # Der Name der VM ist hier fest kodiert, für Testzwecke

# Durchsuchen aller Abonnements nach der VM
$subscriptions = Get-AzSubscription
foreach ($subscription in $subscriptions) {
    Set-AzContext $subscription

    # Suchen der VM mit dem angegebenen Namen
    $vm = Get-AzVM -Name $vmName -ErrorAction SilentlyContinue
    if ($vm) {
        $resourceGroupName = $vm.ResourceGroupName
        # Die VM wurde gefunden, die benötigten Parameter abrufen
        $vnetId = $vm.NetworkProfile.NetworkInterfaces[0].Id.Split("/")[8]
        $vnet = Get-AzVirtualNetwork -ResourceGroupName $resourceGroupName -Name $vnetId
        $subnetId = $vm.NetworkProfile.NetworkInterfaces[0].Id.Split("/")[10]
        $subnet = Get-AzVirtualNetworkSubnet -Name $subnetId -VirtualNetwork $vnet
        $rtName = $subnet.RouteTable.Id.Split("/")[-1]
        $rt = Get-AzRouteTable -Name $rtName -ResourceGroupName $resourceGroupName

        # Ergebnisse ausgeben
        Write-Host "Name der VM: $($vm.Name)"
        Write-Host "Name des VNet: $($vnet.Name)"
        Write-Host "Name des Subnet: $($subnet.Name)"
        Write-Host "Name der Routing-Tabelle: $($rt.Name)"

        # Das Skript endet, sobald eine VM gefunden wurde
        break
    }
}

贝斯特,爱德华
我已经尝试了几个互联网搜索,导致我到不同的网站,但我的知识太有限,找到一个答案(我已经尝试了大约6-7个小时,现在)。

rqcrx0a6

rqcrx0a61#

通过CLI从Azure从VM提取多个参数(代码不起作用)
我使用下面的PowerShell代码检索VM属性(VM名称、VNet、子网、NIC和路由表)

门户中的VM属性详细信息

PowerShell代码

$vmName = "VM8"
$subscriptions = Get-AzSubscription
foreach ($subscription in $subscriptions) {
    Set-AzContext $subscription
    $vm = Get-AzVM -Name $vmName -ErrorAction SilentlyContinue
    $resourceGroupName = $vm.ResourceGroupName
    if ($vm) {
        $networkInterface = Get-AzNetworkInterface -ResourceId $vm.NetworkProfile.NetworkInterfaces[0].Id
        $ipConfig = $networkInterface.IpConfigurations[0]
        $subnet= (Get-AzNetworkInterface -Name $ipConfig.Name -ResourceGroupName $resourceGroupName).IpConfigurations.Subnet.Id.Split("/")[-1]
        $virtualNetwork= (Get-AzNetworkInterface -Name $ipConfig.Name -ResourceGroupName $resourceGroupName).IpConfigurations.Subnet.Id.Split("/")[-3]
        $routeTable= (Get-AzVirtualNetwork -ResourceGroupName $resourceGroupName -Name $virtualNetwork).Subnets
        $routeTableId = $routeTable.RouteTable.Id
        $routeTableName = $routeTableId.Split("/")[-1]
        Write-Output "Virtual Machine Name: $($vm.Name)"
        Write-Output "Virtual Network Name: $virtualNetwork"
        Write-Output "Network Interface Name: $($networkInterface.Name)"
        Write-Output "Subnet Name: $subnet"
        Write-Output "Route Table Name: $routeTableName"
    }
}

输出

相关问题