gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 01:48:27 32 4
gpt4 key购买 nike

我正在尝试生成一份报告,在其中可以查看使用 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 -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 - 用于获取所有虚拟机的正常运行时间的 Azure powershell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42721460/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com