Merhaba,
Daha önceki makalelerimde Powershell Enhanced HTML modülünden bahsetmiştim. Bu makalemde de bu modülü kullanarak Azure VM’lere ait bilgileri nasıl HTML formatına dönüştürebileceğinizden bahsedeceğim.
Aslına bakarsanız modül ile ilgili özelliklerden pek bahsetmeyeceğim. Daha önceki üç makalemi bu konu ile ilgili inceleyebilirsiniz. Bu makalede AzureRM powershell modülünü kulanarak VM’lere ait bilgileri nasıl elde edebileceğiniz üzerine yoğunlaşacağım.
Bildiğiniz gibi günümüzde raporlama ve dashboard’lar bilgileri bir arada görmemizi sağlayan, hatta çeşitli algoritmalar ile belli ölçümler yapmamızı sağlayan önemli araçların başında gelirler. Azure üzerinde bulunan VM’lerin özelliklerini tabiki Azure portal üzerinden görmeniz mümkün. Ancak bilgilere tek bir yerden ulaşma kısmı biraz sıkıntılı. Çünkü Azure resource manager mimarisinde kaynaklar birbirleri ile relation kurarak bir yapıyı meydana getirdikleri için, her kaynağın özelliklerini görüntülemek için ilgili kaynağa gitmek ve özelliklerine ulaşmak gerekir.
Bu sebeplerden ötürü bir VM’e ait önemli özellikleri bir script ile elde edip VM’e ait bir obje oluşturmak ve buna ilişkin de bir tablo ile sunmak istedim. Belki IIS üzerinden bu dosyayı da yayınlarsanız ve belli aralıklar ile scripti çalıştırarak güncellerseniz, static fakat VM’ler hakkında ayrıntılı bilgi almayı sağlayan bir dashboard’u basit şekilde oluşturmuş olursunuz.
Bu amaçla aşağıdaki scripti yazdım. Umarım işinize yarar. Scripti geliştirip ek özellikler de kolaylıkla ekleyebilirsiniz.
Script’i çalıştırıp çıktısı olan html uzantılı dosyayı bir browser’da açtığınızda aşağıdaki gibi basit bir html dashboard’u elde edebilirsiniz.
Resim – 1
Scriptin tamamına aşağıdaki gibidir. Komutlara ilişkin açıklamaları komutların bir önceki satırında bulabilirsiniz.
Login-AzureRmAccount
#Tüm VM’leri get edip değişkene ata (Burada isterseniz farklı filtreler de kullanabilirsiniz.
$VMs = Get-AzureRmVM
If ($($VMs).count -gt 0){
#Her VM için gerekli bilgileri elde edip PS object oluştur.
ForEach ($vmi in $VMs)
{
#VM size bilgisini değişkene ata
$sizeinfo = Get-AzureRmVMSize -Location $vmi.location | where-object {$_.name -eq “$($vmi.hardwareprofile.vmsize)“
}
#VM durum bilgisini değişkene ata
$statusinfo = Get-AzureRmVM -ResourceGroupName $vmi.ResourceGroupName -Name $vmi.Name -Status
$vmst = ($statusinfo.Statuses[1].DisplayStatus).Split(” “)[1]
#VM’in NIC bilgisi üzerinden vnet ve subnet bilgisini değişkene ata.
$vmNIC = Get-AzureRmNetworkInterface | where {$_.Id -eq $vmi.NetworkProfile.NetworkInterfaces[0].Id}
$vnet = $vmNIC.IpConfigurations[0].Subnet[0].Id.Split(‘/’)[8]
$subnet = $vmNIC.IpConfigurations[0].Subnet[0].Id.Split(‘/’)[10]
#VM’e ait tüm preperty’leri içeren bir hash table oluştur
$props = [ordered]@{ “Name” = $vmi.name
“HardwareProfile” = $vmi.hardwareprofile.vmsize
“Location” = $vmi.location
“NumberofCores” = $sizeinfo.NumberOfCores
“MemoryInMB” = ($sizeinfo.MemoryinMB/1024).ToString() + ” GB”
“MaxDataDiskCount” = $sizeinfo.MaxDataDiskCount
“OSDiskSizeInMB” = ($sizeinfo.OSDiskSizeInMB/1024).ToString() + ” GB”
“ResourceDiskSizeInMB” = ($sizeinfo.ResourceDiskSizeInMB/1024).ToString() + ” GB”
“Status” = $vmst
“VNet” = $vnet
“Subnet” = $subnet
}
#Hash table’ı kullanarak her bir vm için ps object oluştur
$Results += @(New-Object pscustomobject -Property $props)
}
}
#Enhanced HTML parametreleri için hash table oluştur.
$params = @{‘As’=‘Table’;
‘PreContent’=‘<h2> + FRT Azure Vms</h2>’;
‘EvenRowCssClass’=‘even’;
‘OddRowCssClass’=‘odd’;
‘MakeTableDynamic’=$true;
‘MakeHiddenSection’=$true;
‘TableCssClass’=‘grid’;
‘Properties’=‘Name’,‘HardwareProfile’,‘Location’,‘NumberofCores’,‘MemoryInMB’,‘MaxDataDiskCount’,‘OSDiskSizeInMB’,‘ResourceDiskSizeInMB’, @{n=‘Status’;e={$_.Status};css={if ($_.Status -eq “deallocated”) { ‘red’ } else {‘green’}}},‘Vnet’,‘Subnet’}
#Her bir VM için oluşturulan ps objelerini kullanarak html fragment oluştur
$azurevms = $Results | ConvertTo-EnhancedHTMLFragment @params
#HTML fragment’i kullanarak ve gerekli css’leri kullanarak HTMl uzantılı dosyayı oluştur.
ConvertTo-EnhancedHTML -HTMLFragments $azurevms -CssUri C:\CSS\styles2.css -PreContent “<H1>FRT Azure VM Report</H1>”
| Out-File “FRTAzureVM.html”
Kullandığım CSS dosyası da aşağıdaki gibidir.
body {
color:#333333;
font-family:Calibri,Tahoma;
font-size: 10pt;
}
h1 {
text-align:center;
}
h2 {
border-top:1px solid #666666;
}
th {
font-weight:bold;
color:#eeeeee;
background-color:#333333;
cursor:pointer;
}
.odd { background-color:#ffffff; }
.even { background-color:#dddddd; }
.paginate_enabled_next, .paginate_enabled_previous {
cursor:pointer;
border:1px solid #222222;
background-color:#dddddd;
padding:2px;
margin:4px;
border-radius:2px;
}
.paginate_disabled_previous, .paginate_disabled_next {
color:#666666;
cursor:pointer;
background-color:#dddddd;
padding:2px;
margin:4px;
border-radius:2px;
}
.dataTables_info { margin-bottom:4px; }
.sectionheader { cursor:pointer; }
.sectionheader:hover { color:red; }
.grid { width:100% }
.red {
color:red;
font-weight:bold;
}
.green {
color:green;
font-weight:bold;
}
Bir sonraki makalede görüşmek üzere.
Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.
Referanslar
https://docs.microsoft.com/en-us/azure/virtual-machines/windows/overview
https://www.pluralsight.com/courses/reporting-powershell-enhanced-html
TAGs: powershell, Azure Rm Powershell Module, Create Azure VM , Create Azure RM VM with Powershell, Azure RM VM via powershell, Create Azure virtual machine via powershell, Powershell Azure VM Command, Azure RM Module, Manage azure vm with powershell, Azure Powershell, Powershell Module for Azure, Azure VM Dashboard, Create Azure VM Dashboard, Azure VM Dashboard via Powershell, Enhanced HTML module, Powershell Enhanced HTML for Azure VM, Azure VM Dashboard with Enhanced HTML
Fırat