-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy pathAA-VMInventory.ps1
115 lines (107 loc) · 3.74 KB
/
AA-VMInventory.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#Importing modules...
Import-Module Az.Accounts
Import-Module Az.Resources
Import-Module Az.Compute
Import-Module Az.Automation
Import-Module Az.Storage
Import-Module Az.KeyVault
#
# Connnection Phase
#
$connectionName = "AzureRunAsConnection"
try
{
$servicePrincipalConnection = Get-AutomationConnection -Name $connectionName
Connect-AzAccount `
-ServicePrincipal `
-TenantId $servicePrincipalConnection.TenantId `
-ApplicationId $servicePrincipalConnection.ApplicationId `
-CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint
}
catch {
if (!$servicePrincipalConnection)
{
$ErrorMessage = "Connection $connectionName not found."
throw $ErrorMessage
} else{
Write-Error -Message $_.Exception
throw $_.Exception
}
}
#
# Functions
#
Function Msgbox($caption,$message,$type,$MaxSize){
if ($MaxSize -eq $null) { $MaxSize = 90}
$sCaption = $caption.Length
$sMessage = $Message.Length
If (($sCaption + $sMessage) -ge $MaxSize) {
$MaxSize = ($sCaption + $sMessage) + 20
}
$vDynamicSpace = $MaxSize - ($sCaption + $sMessage)
$vDynamicSpace = " " * $vDynamicSpace
$vText = $caption + $message + $vDynamicSpace + "["
if ($type -eq '0') {
$vText += " OK "
}Elseif ($type -eq '1'){
$vText += " WARNING "
}Else{
$vText += " ERROR "
}
$vText += "]"
Write-Output $vText
}
Function VMInventory($VMName){
$info = "" | Select Name, ResourceGroupName, Location, VMSize, OSDisk, DataDisk, SnapName, TotalDataDisks
$vm = Get-AzVM -Name $VMName
$info.Name = $vm.Name
$info.ResourceGroupName = $vm.ResourceGroupName
$info.Location = $vm.Location
$info.VMSize = $vm.HardwareProfile.VmSize
$info.OSDisk = $vm.StorageProfile.OsDisk
$info.DataDisk = $vm.StorageProfile.DataDisks
$info.TotalDataDisks = ($vm.StorageProfile.DataDisks).count
$info.Snapname = $vSnapName
#Making sure all disks attached to the VM are on the same version
$vStatus = $False
If (!($info.OSDisk.Name -like $vSnapName)) {$vStatus=$true}
ForEach ($disk in $info.DataDisk) {
If (!($disk.Name -like $vSnapName)) {$vStatus=$true; $vcount++}
}
if (!(Get-AzDisk | where-object { $_.Name -like $vSnapName })) {
$vStatus = $true
}
If ($vstatus -eq $true) {
Return $info
}Else{
Return $vstatus
}
}
#
# Script Body
#
#Global Variables
$vResourceGroupname = "AP-Operations"
$vAutomationAccountName = "AA-CanC-Operations"
$vaStorageAccount = Get-AzAutomationVariable $vAutomationAccountName -Name "StorageAccount" -ResourceGroupName $vResourceGroupname
#Storage Connection
$StartTime = Get-Date
$EndTime = $startTime.AddHours(1.0)
$stgAccount = Get-AzStorageAccount -Name $vaStorageAccount.value -ResourceGroupName $vResourceGroupname
$SASToken = New-AzStorageAccountSASToken -Service Blob -ResourceType Container,Object -Permission "racwdlup" -startTime $StartTime -ExpiryTime $EndTime -Context $StgAccount.Context
$stgcontext = New-AzStorageContext -storageAccountName $stgAccount.StorageAccountName -SasToken $SASToken
Msgbox "Subscription: " ((Get-AzContext).Name) 0 70
$RGs = Get-AzResourcegroup
ForEach ($rg in $RGs){
Msgbox "Resource Group: " $rg.ResourceGroupName 0 70
$VMs= Get-AzVM -ResourceGroupName $rg.ResourceGroupName
ForEach ($vm in $VMs){
$tmp = VMInventory $vm.name
If ($tmp) {
Msgbox "Generating JSON: " $vm.name 0 70
$vFileName = ((get-date -format "yyyy-MM-dd-") + ($vm.Name) + ".json")
$tmp | convertto-json | out-file $vFileName -Force
$tmp2 = Set-AzStorageBlobContent -File $vFileName -Container vminventory -Context $stgcontext -Force
}
}
}