param (
[parameter(Mandatory =
$false)]
$LocationName
=
“ChinaEast2”,
[parameter(Mandatory =
$false)]
$ExportTo
=
[Environment]::GetFolderPath(“Desktop”) +
“\”
+
$LocationName
+
“-VMImage-“
+ $(Get-Date
-Format
“yyyyMMdd-HHmmss”) +
“.csv”
)
function
Check-AzureRmLocation()
{
param
(
[string]$LocationName = $(throw
“Parameter missing: -LocationName LocationName”)
)
Write-Host
“$(Get-Date) * Checking location $LocationName“
-ForegroundColor
Cyan
$Location
=
Get-AzureRmLocation
|
Where-Object { $_.Location -eq $LocationName }
If (-not ($Location))
{
Write-Host
“$(Get-Date) * The location”
$LocationName
“does not exist.”
-ForegroundColor
Red
return
$false
}
Else
{
Write-Host
“$(Get-Date) * Location $LocationName exists”
-ForegroundColor
Cyan
return
$true
}
}
$LocationExist
=
Check-AzureRmLocation
-LocationName
$LocationName
if ($LocationExist
-eq
$true)
{
write-host
“$(Get-Date) * Begin to collect VM Image information..Please wait”
-ForegroundColor
‘Cyan’
[pscustomobject[]]$VMImageObjects =
$null
if (Test-Path
$ExportTo)
{
Clear-Content
$ExportTo
-Force
}
$Error.clear()
try
{
$Publishers
= (Get-AzureRmVMImagePublisher
-Location
$LocationName
-ErrorAction
Stop).PublisherName
$TotalPublisherCounts
=
$Publishers.count
$PublisherCount
=
1
foreach ($Publisher
in
$Publishers)
{
Write-Progress
-Activity (“Current Publisher: $Publisher“) -Status
“Searching $PublisherCount Publisher, Total Publisher: $TotalPublisherCounts“
-PercentComplete ($PublisherCount/ $TotalPublisherCounts
*
100) -Id
1
$Offers
= (Get-AzureRmVMImageOffer
-Location
$LocationName
-PublisherName
$Publisher
-ErrorAction
Stop).offer
$TotalOfferCounts
=
$Offers.count
if ($TotalOfferCounts
-eq
0)
{
$PublisherCount++
}
else
{
$OfferCount
=
1
foreach ($Offer
in
$Offers)
{
Write-Progress
-Activity (“Current Offer: $Offer“) -Status
“Searching $OfferCount Offer, Total Offer: $TotalOfferCounts“
-PercentComplete ($OfferCount/ $TotalOfferCounts
*
100) -Id
2
-ParentId
1
$Skus
=
Get-AzureRmVMImageSku
-Location
$LocationName
-PublisherName
$Publisher
-Offer
$Offer
-ErrorAction
Stop
$TotalSkuCounts
=
$Skus.count
if ($TotalSkuCounts
-eq
0)
{
$OfferCount++
}
else
{
$SkuCount
=
1
foreach ($Sku
in
$Skus)
{
$VMImageObject
=
New-Object
-TypeName
psobject
$VMImageObject
|
Add-Member
-MemberType
NoteProperty
-Name
LocationName
-Value
$Sku.Location
$VMImageObject
|
Add-Member
-MemberType
NoteProperty
-Name
PublisherName
-Value
$Sku.PublisherName
$VMImageObject
|
Add-Member
-MemberType
NoteProperty
-Name
OfferName
-Value
$Sku.Offer
$VMImageObject
|
Add-Member
-MemberType
NoteProperty
-Name
SkuName
-Value
$Sku.skus
$VMImageObjects
+=
$VMImageObject
Write-Progress
-Activity (“Current Sku: $($Sku.skus)“) -Status
“Searching $SkuCount Sku, Total Sku: $TotalSkuCounts“
-PercentComplete ($SkuCount/ $TotalSkuCounts
*
100) -id
3
-ParentId
2
Start-Sleep
-Milliseconds
500
$SkuCount++
}
$OfferCount++
}
}
$PublisherCount++
}
}
if ($VMImageObjects
-ne
$null)
{
$VMImageObjects
|
Export-Csv
-LiteralPath
$ExportTo
-NoTypeInformation
-Force
-ErrorAction
Stop
Write-Host
“$(Get-Date) * Export successfully, Please check $ExportTo“
-ForegroundColor
Cyan
}
else
{
Write-Host
“$(Get-Date) * Something wrong”
-ForegroundColor
Red
}
}
catch
{
Write-Warning
$Error[0].Exception.Message
}
}
|