我正在尝试生成一个报告,在哪里可以使用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(资源管理器)?
答案 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"
}