Azure powershell命令可以获得所有vms的正常运行时间

时间:2017-03-10 15:01:46

标签: powershell azure

我正在尝试生成一个报告,在哪里可以使用PowerShell查看所有虚拟机的正常运行时间。

我们正在为这些虚拟机使用AzureRmVM-(资源管理器)。

目前我发现了这样的事情:

ForEach ($vm in $vmsList) { $vm.Name + " - " + $vm.ResourceGroupName }

get-vm | where {$_.state -eq 'running'} | sort Uptime | select Name,Uptime,@{N="MemoryMB";E={$_.MemoryAssigned/1MB}},Status

我怎样才能使用powershell -rm(资源管理器)?

1 个答案:

答案 0 :(得分:1)

尝试收集所有虚拟机:

$AllVMs = Get-AzVM -Status | Where-Object { $_.PowerState -eq 'VM running' }

然后遍历每个VM,捕获Audit Log,搜索VM启动并计算与当前时间的时间差

foreach ($VM in $AllVMs) {
Write-Host "Check: $($VM.Name)"
$VMAzLog = Get-AzLog -ResourceId $VM.Id `
| Where-Object { $_.OperationName.LocalizedValue -Like 'Start Virtual Machine' } `
| Sort-Object EventTimestamp -Descending `
| Select-Object -First 1
$BootTime = $VMAzLog.EventTimestamp
if ($BootTime) {
$TimeSpan = New-TimeSpan -Start $($VMAzLog.EventTimestamp) -End (Get-Date)
$Uptime = '{0}:{1:D2}:{2:D2}' -f (24*$TimeSpan.Days + $TimeSpan.Hours),$TimeSpan.Minutes,$TimeSpan.Seconds
}
else {
$Uptime = "n/a" 
}
Write-Host "Uptime: $Uptime"
}