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
|
function Show-AzVm {
<#
.SYNOPSIS
List all details of an Azure VM whose name contains an input string.
.DESCRIPTION
We'll find out all VMs inside the subscription we are logged into
which contain the string $VmName (i.e. 'yVirtua' will yield 'myVirtualMachine').
If we find more than one result, we will throw an exception telling this.
If there is one match, a more or less terse output will be generated displaying
the VM details.
.INPUTS
String. The VM name we want to investigate. Part of the name is sufficient if
unambiguous inside the active subscription.
.OUTPUTS
String. A coloured JSON output showing a more or less terse list of
the virtual machine's parameters.
#>
[Alias(
'azvmdeets',
'azvmdetails',
'azvmd'
)]
Param(
[Parameter(
Mandatory=$true,
ValueFromPipeline=$true,
HelpMessage="Exact name of a VM",
Position=0
)
]
[ValidateLength(1,64)]
[string]
$VmName
)
foreach ($myvm in $VmName) {
# az vm list -d -o jsonc --query "[?name == `'$myvm`']" `
# | ConvertFrom-Json `
# | Select-Object name,powerState,privateIps,publicIps,resourceGroup,tags
# Something like a zone also doesn't come with list -d, we need show for THAT,
# and show needs the resource group.
# also, az vm list -d is raging slow (5+ seconds at times).
# ALSO, az vm show -d is raging slow.
# We need one of these to see BASIC stuff like IPs or power state. Cheerio.
# So: list the VM with the name, extract resource group, switch to az vm show.
$resvms = (az vm list -d -o jsonc --query "[?name == `'$myvm`']" | ConvertFrom-Json) `
| Select-Object name,resourceGroup,powerState,privateIps,publicIps
if ( [String]$resvms.GetType() -ne 'System.Management.Automation.PSCustomObject' ) {
foreach ($resvm in $resvms) {
az vm show -d -g $resvm.resourceGroup -n $resvm.name -o jsonc `
--query '{name: name, id: id, powerState: powerState, resourceGroup: resourceGroup, zones: zones, privateIps: privateIps, publicIps: publicIps, tags: tags}'
# $resvm | Select-Object powerState,privateIps,publicIps
}
} else {
az vm show -d -g $resvms.resourceGroup -n $resvms.name -o jsonc `
--query '{name: name, id: id, powerState: powerState, resourceGroup: resourceGroup, zones: zones, privateIps: privateIps, publicIps: publicIps, tags: tags}'
# $resvms | Select-Object powerState,privateIps,publicIps
}
}
}
|