【问题标题】:Azure powershell command to get the uptime for all vmsAzure powershell 命令获取所有虚拟机的正常运行时间
【发布时间】:2022-01-03 19:53:01
【问题描述】:

我正在尝试生成一份报告,在哪里可以看到我使用 PowerShell 的所有 VM 的正常运行时间。

我们正在为这些虚拟机使用 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(资源管理器)做到这一点?

【问题讨论】:

  • 我在 AzureRM.Compute 模块中看不到任何相关内容
  • @4c74356b41 嗯,但是有没有办法做到这一点,或者这是不可能的? :D 可能是这样的,检查启动时间,然后从 todays_date 中减去。
  • 好吧,看看资源本身吧,我认为 Azure 无论如何都不会跟踪它

标签: powershell azure


【解决方案1】:

收集您订阅的所有正在运行的虚拟机:

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

然后遍历每个虚拟机,捕获审计日志,搜索虚拟机启动并计算与当前时间的时间差。

# Create Custom Object
$UptimeReport = @()

# Walk through each VM
foreach ($VM in $AllVMs) {

    # Get Subscription Information
    $ctx = Get-AzContext
    Write-Host "Check: '$($VM.Name)' in Subscription '$($ctx.Subscription.Name)'"
    
    # Get the Activity Log of the VM
    $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) {
        $Uptime = '{0}:{1:D2}:{2:D2}' -f (24 * $TimeSpan.Days + $TimeSpan.Hours), $TimeSpan.Minutes, $TimeSpan.Seconds
    }
    else {
        $Uptime = "n/a" 
    }

    if ($BootTime) {
        
        $TimeSpan = New-TimeSpan -Start $($VMAzLog.EventTimestamp) -End (Get-Date)

        $UptimeReport += [PSCustomObject]@{
            VM             = $VM.Name
            SubscriptionId = $ctx.Subscription.id
            Uptime         = $Uptime
        }
    }
}

最后,打印结果:

# Print Result
return $UptimeReport | Sort-Object -Property VM | ft * -AutoSize

【讨论】:

  • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量更高,更有可能吸引投票。
  • 但这只会给出从服务器上次重新启动/从服务器连续运行的时间开始的正常运行时间,对吗?有没有办法使用powershell脚本获取服务器的每月正常运行时间数据(服务器在一个月内运行的总时间,与服务器的启动和停止次数无关)?
  • 这可以通过 LogAnalytics 帐户和监控代理实现。你可以数心跳。或者您正在使用 Cost-API
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 2021-10-10
  • 2021-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多