[Azure]Azure Powershell导出虚拟机及对应磁盘

60 篇文章 0 订阅
59 篇文章 0 订阅

这里发两个脚本,用于获取某个账号下的所有订阅中的虚拟机的磁盘信息,分ASM和ARM两部分。


ASM版本:

$Cred = New-Object System.Management.Automation.PSCredential("XXXXXXXXX@XXXXXXXXX.partner.onmschina.cn",(ConvertTo-SecureString "XXXXXXXXX" -AsPlainText -Force));
$AzureRMCred = Get-Credential -Credential $Cred;
Add-AzureAccount -Environment AzureChinaCloud -Credential $AzureRMCred;

Function WriteToXMLOutput($str)
{
    $OutputfilePath = $PSScriptRoot + "\VM_and_Disks.xml";
    $str | Out-File $OutputfilePath -Append;
}

Function BuildLevelSpace($level)
{
    $levelSpace = "  ";
    $result = "";
    for ($i = 1; $i -lt $level; $i++)
    {
        $result += $levelSpace;
    }
    return $result;
}

Function BuildSubscriptionsHead()
{
    return (BuildLevelSpace 1) + "<subscriptions>";
}

Function BuildSubscriptionsEnd()
{
    return (BuildLevelSpace 1) + "</subscriptions>";
}

Function BuildSubscriptionHead($subscriptionName)
{
    return (BuildLevelSpace 2) + "<subscription name='$subscriptionName'>";
}

Function BuildSubscriptionEnd($subscriptionName)
{
    return (BuildLevelSpace 2) + "</subscription>";
}

Function BuildVirtualMachinesHead()
{
    return (BuildLevelSpace 3) + "<virtualmachines>";
}

Function BuildVirtualMachinesEnd()
{
    return (BuildLevelSpace 3) + "</virtualmachines>";
}

Function BuildVirtualMachineHead($virtualmachineName, $OSType, $Size)
{
    return (BuildLevelSpace 4) + "<virtualmachine name='$virtualmachineName' OS='$OSType' size='$Size'>";
}

Function BuildVirtualMachineEnd()
{
    return (BuildLevelSpace 4) + "</virtualmachine>";
}

Function BuildOutputXml()
{
    $subscriptions = Get-AzureSubscription;

    WriteToXMLOutput ((BuildLevelSpace 1) + "<?xml version='1.0'?>");
    WriteToXMLOutput (BuildSubscriptionsHead);

    # loop all the subscriptions
    foreach($subscription in $subscriptions)
    {
        $subscriptionName = $subscription.SubscriptionName;
        Select-AzureSubscription -SubscriptionName $subscriptionName;

        WriteToXMLOutput (BuildSubscriptionHead $subscriptionName);
        
        $vms = Get-AzureVM;
        if($vms.Count -gt 0)
        {
            WriteToXMLOutput (BuildVirtualMachinesHead);
    
            foreach($vm in $vms)
            {
                WriteToXMLOutput (BuildVirtualMachineHead $vm.Name $vm.VM.OSVirtualHardDisk.OS $vm.VM.RoleSize);
                # build disk output
                WriteToXMLOutput ((BuildLevelSpace 5) + "<OSDisk>" + $vm.VM.OSVirtualHardDisk.MediaLink.AbsoluteUri + "</OSDisk>");
                if($vm.VM.DataVirtualHardDisks.Count -gt 0)
                {
                    WriteToXMLOutput ((BuildLevelSpace 5) + "<DataDisks>");
                    foreach($DataDisk in $vm.VM.DataVirtualHardDisks)
                    {
                        $size = $DataDisk.LogicalDiskSizeInGB;
                        $lun = $DataDisk.Lun;
                        $uri = $DataDisk.MediaLink.AbsoluteUri;
                        WriteToXMLOutput ((BuildLevelSpace 6) + "<DataDisk lun='$lun' size='$size'>$uri</DataDisk>");
                    }
                    WriteToXMLOutput ((BuildLevelSpace 5) + "</DataDisks>");
                }
                WriteToXMLOutput (BuildVirtualMachineEnd);
            }
        
            WriteToXMLOutput (BuildVirtualMachinesEnd);
        }
        WriteToXMLOutput (BuildSubscriptionEnd $subscriptionName);
    }

    WriteToXMLOutput (BuildSubscriptionsEnd);
}

BuildOutputXml


ARM版本:

$Cred = New-Object System.Management.Automation.PSCredential("XXXXXXXXX@XXXXXXXXX.partner.onmschina.cn",(ConvertTo-SecureString "XXXXXXXXX" -AsPlainText -Force));
$AzureRMCred = Get-Credential -Credential $Cred;
Login-AzureRmAccount -EnvironmentName AzureChinaCloud -Credential $AzureRMCred;

Function WriteToXMLOutput($str)
{
    $OutputfilePath = $PSScriptRoot + "\VM_and_Disks.xml";
    $str | Out-File $OutputfilePath -Append;
}

Function BuildLevelSpace($level)
{
    $levelSpace = "  ";
    $result = "";
    for ($i = 1; $i -lt $level; $i++)
    {
        $result += $levelSpace;
    }
    return $result;
}

Function BuildSubscriptionsHead()
{
    return (BuildLevelSpace 1) + "<subscriptions>";
}

Function BuildSubscriptionsEnd()
{
    return (BuildLevelSpace 1) + "</subscriptions>";
}

Function BuildSubscriptionHead($subscriptionName)
{
    return (BuildLevelSpace 2) + "<subscription name='$subscriptionName'>";
}

Function BuildSubscriptionEnd($subscriptionName)
{
    return (BuildLevelSpace 2) + "</subscription>";
}

Function BuildVirtualMachinesHead()
{
    return (BuildLevelSpace 3) + "<virtualmachines>";
}

Function BuildVirtualMachinesEnd()
{
    return (BuildLevelSpace 3) + "</virtualmachines>";
}

Function BuildVirtualMachineHead($virtualmachineName, $OSType, $Size, $Location)
{
    return (BuildLevelSpace 4) + "<virtualmachine name='$virtualmachineName' OS='$OSType' size='$Size' location='$Location'>";
}

Function BuildVirtualMachineEnd()
{
    return (BuildLevelSpace 4) + "</virtualmachine>";
}

Function BuildOutputXml()
{
    $subscriptions = Get-AzureRmSubscription;

    WriteToXMLOutput ((BuildLevelSpace 1) + "<?xml version='1.0'?>");
    WriteToXMLOutput (BuildSubscriptionsHead);

    # loop all the subscriptions
    foreach($subscription in $subscriptions)
    {
        $subscriptionName = $subscription.SubscriptionName;
        Select-AzureRmSubscription -SubscriptionName $subscriptionName;

        WriteToXMLOutput (BuildSubscriptionHead $subscriptionName);
        
        $vms = Get-AzureRmVM;
        if($vms.Count -gt 0)
        {
            WriteToXMLOutput (BuildVirtualMachinesHead);
    
            foreach($vm in $vms)
            {
                WriteToXMLOutput (BuildVirtualMachineHead $vm.Name $vm.StorageProfile.OsDisk.OsType $vm.HardwareProfile.VmSize $vm.Location);
                # build disk output
                WriteToXMLOutput ((BuildLevelSpace 5) + "<OSDisk>" + $vm.StorageProfile.OsDisk.Vhd.Uri + "</OSDisk>");
                if($vm.StorageProfile.DataDisks.Count -gt 0)
                {
                    WriteToXMLOutput ((BuildLevelSpace 5) + "<DataDisks>");
                    foreach($DataDisk in $vm.StorageProfile.DataDisks)
                    {
                        $size = $DataDisk.DiskSizeGB;
                        $lun = $DataDisk.Lun;
                        $uri = $DataDisk.Vhd.Uri;
                        WriteToXMLOutput ((BuildLevelSpace 6) + "<DataDisk lun='$lun' size='$size'>$uri</DataDisk>");
                    }
                    WriteToXMLOutput ((BuildLevelSpace 5) + "</DataDisks>");
                }
                WriteToXMLOutput (BuildVirtualMachineEnd);
            }
        
            WriteToXMLOutput (BuildVirtualMachinesEnd);
        }
        WriteToXMLOutput (BuildSubscriptionEnd $subscriptionName);
    }

    WriteToXMLOutput (BuildSubscriptionsEnd);
}

BuildOutputXml


输出示例:






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值