Azure powershell命令以获取所有虚拟机的正常运行时间

Azure powershell命令以获取所有虚拟机的正常运行时间,powershell,azure,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

我正在尝试生成一个报告,从中可以看到使用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(资源管理器)实现这一点?

尝试收集所有虚拟机:

$AllVMs = Get-AzVM -Status | Where-Object { $_.PowerState -eq 'VM running' }
然后对每个虚拟机进行交互,捕获审核日志,搜索虚拟机开始,并计算与当前时间的时差

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"
}

我在AzureRM.Compute中没有看到任何相关内容module@4c74356b41嗯,但是有没有办法做到这一点,或者说这是不可能的D可能是这样的,检查启动时间,然后从今天的日期中减去。好吧,看看资源本身,我不认为Azure跟踪到了这一点。无论如何,请不要只发布代码作为答案,还要解释代码的作用以及它如何解决问题。带解释的答案通常更有帮助,质量更好,更有可能吸引更多的投票。但这只会给出服务器上次重新启动时/服务器持续运行时的正常运行时间,对吗?是否有办法使用powershell脚本获取服务器的每月正常运行时间数据(服务器在一个月内运行的总时间,与服务器的启动和停止次数无关)?这可以通过LogAnalytics帐户和监视代理实现。你可以数心跳。或者您正在使用Cost API