[玩转系统] 如何使用 PowerShell 构建 Azure 详细使用情况报告
作者:精品下载站 日期:2024-12-14 20:51:49 浏览:11 分类:玩电脑
如何使用 PowerShell 构建 Azure 详细使用情况报告
在 Azure 中运行工作负载的最重要方面之一是跟踪费用。为此,您可以使用 Azure 详细使用情况报告跟踪资源使用情况。在本文中,你将了解如何创建 PowerShell 脚本来轻松按日期查询所有 Azure 资源的 Azure 资源使用情况和费用。
Azure 中的资源会以多种不同方式不断增加您的账单。尽管您可以通过门户网站查看资源使用情况,但它是有限的。但是,通过使用几个 PowerShell cmdlet,您可以构建一个方便的报告,让您全面了解 Azure 资源的使用情况(从而产生费用)。
本文是根据 TechSnips YouTube 视频创作的。如果您是一个更注重视觉学习的人,请随意观看视频。否则,请继续阅读!
通过 Azure 帐户中心下载报告
您可以从 Azure 帐户中心下载许多不同的使用情况报告。 Azure 帐户中心是一个 Web 门户,可让你查看计费周期历史记录、下载发票以及查看 Azure 订阅的概述。
尽管可以通过 Azure 帐户中心下载 Azure 使用情况报告,但在选择日期范围方面没有灵活性。您无法将使用限制在某个日期范围内,因为日期是固定的以与您的计费周期一致。
您可以在下面看到计费周期的示例以及下载使用情况报告的链接。
这些使用情况报告中包含许多您可能不需要的其他信息。
也许您需要过去 60 天的使用情况报告。要使用 Azure 帐户中心获取此信息,您必须下载至少三个计费周期的使用情况报告,以涵盖所有所需日期。
下载报告后,您必须删除多余的数据。然后你必须找到一种方法来以某种方式整合这些数据。不,谢谢!这开销太大了。
使用 PowerShell,您可以构建可重用的脚本、函数或模块来提取 Azure 资源使用情况报告。反过来,这些可以通过几行命令手动运行,或者作为计划任务来自动执行。
先决条件
这是一篇演练文章。为了继续进行,您需要准备一些东西。
- Windows 10 或更高版本。
- Windows Powershell v5.1
- 脚本编辑器,例如 Notepad++ 或集成脚本环境 (ISE),例如 Windows PowerShell ISE 和 Visual Studio Code。
- Azure 订阅。
- Azure PowerShell 模块。截至本文的最新版本是 2.6.0。该模块必须安装在您的机器上。如果您还没有,可以使用 PowerShellGet 安装它
- 使用 Connect-AzAccount cmdlet 建立与 Azure 的连接
如何获取资源使用数据
在创建脚本之前,我们首先讨论使用 Get-UsageAggregates
cmdlet 的基础知识。这是一个 cmdlet,允许您按日期范围、每小时或每天等指标提取 Azure 资源使用情况。 Get-UsageAggregates
cmdlet 是主要的 cmdlet,它实现了您将在本文中学习的大部分功能。
为了演示 Get-UsageAggregates
cmdlet,假设您需要查找 2019 年 4 月 1 日到 2019 年 9 月 12 日期间的 Azure 资源使用情况。相同的技术可用于任何日期范围。下面您将看到一个片段,用于根据这些日期查找使用数据。
$params = @{
ReportedStartTime = '04-01-19'
ReportedEndTime = '09-12-19'
AggregationGranularity = 'Hourly'
ShowDetails = $true
}
$usageData = Get-UsageAggregates @params
Parameter
Value
Usage Explanation
ReportStartTime
04-01-19
This is the oldest date you want to retrieve.
(Month Day Year)
ReportEndTime 09-12-19 This is the latest date you want to retrieve.(Month Day Year)
AggregationGranularity Hourly The granularity of data to return. Valid values are “Daily” and “Hourly” ShowDetails $True Indicates whether the instance-level details are expanded如果有返回的数据,您应该会得到类似于下面的屏幕截图的结果。您可以看到实际使用数据存储在 UsageAggregations
属性中。
在 Get-UsageAggregates 中处理分页
在上面的部分中,命令通常会返回数千个对象,尤其是对于长日期范围。为了防止 API 不堪重负,Get-UsageAggregates
命令最多仅返回 1000 个结果。如果您已按照上一节所述保存了 $usageData
变量,则可以通过运行此命令 $usageData.UsageAggregations.count
来确认它。
如果结果超过 1000 条怎么办?你还需要做更多的工作。
当您举例说明 Get-UsageAggregates
返回的属性时,您会注意到一个名为 ContinuationToken
的属性,如下所示。可以看到这个token是一长串字符。
ContinuationToken
是指向下一组结果的指针。该属性充当书签,以了解从哪个页面获取下一批结果。
为了进行演示,请使用 $usageData.UsageAggregations[-1]
获取上一个结果中的最后一项,如下所示。请记下使用开始
和使用结束
时间。
现在再次将相同的参数传递给 Get-UsageAggregates
命令。但这一次,使用 ContinuationToken
参数并使用之前返回的 ContinuationToken
属性的值。您可以在下面看到如何执行此操作的示例。
$params = @{
ReportedStartTime = '04-01-19'
ReportedEndTime = '09-12-19'
AggregationGranularity = 'Hourly'
ShowDetails = $true
ContinuationToken = $usageData.ContinuationToken
}
$usageData = Get-UsageAggregates @params
现在,使用 $usageData.UsageAggregations[-1]
获取 UsageAggregations
属性数组中的最后一项。将其与之前的结果进行比较,以确认新结果有所不同。
比较应该与您在下面看到的类似。请注意,日期范围相隔 7 天。通过使用 ContinuationToken
,您检索了第二页结果。
构建 Azure 资源使用情况报告功能
您应该了解分页的工作原理以及如何使用 ContinuationToken
属性和参数。但是,如果要检索数万甚至数十万个结果怎么办?以这种方式手动使用令牌效果不会很好。
让我们构建一个 PowerShell 来为我们处理这种分页需求,并为我们提供更多的灵活性。该脚本将允许您提供自己的参数并处理分页要求。如果需要的话,它还可以让您灵活地扩展它以执行其他任务。
构建参数
首先构建一些功能脚手架。下面您可以看到一个名为 Get-AzureUsage
的示例函数。该函数具有三个看起来很熟悉的参数。
以前,这些参数是在 Get-UsageAggregates
cmdlet 本身上定义的。您现在正在构建一个“包装器”函数,它将向此 cmdlet 传递值。
Function Get-AzureUsage {
[CmdletBinding()]
param(
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[datetime]$FromTime,
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[datetime]$ToTime,
[Parameter()]
[ValidateNotNullOrEmpty()]
[ValidateSet('Hourly', 'Daily')]
[string]$Interval = 'Daily'
)
下表提供了有关所有这些参数的更多信息。
Parameter使用
FromTime这是接受 DateTime 值的强制参数。该值表示报告的最早日期。
ToTime这是接受 DateTime 值的强制参数。该值代表报告的最新日期。
Interval这是一个非空参数,接受两个可能的值:“每日”和“每小时”。默认值为每日。这表示要返回的报告的粒度。
查询资源使用情况
创建函数并定义所有参数后,就可以填写函数的其余部分了。
您可以在下面看到 Get-AzureUsage
函数的其余部分。请务必查看注释,以便更深入地了解代码的用途。
Write-Verbose -Message "Querying usage data [$($FromTime) - $($ToTime)]..."
$usageData = $null
## Start the do/while loop to automatically handle the continuation token
do {
## Define all parameters to pass to Get-UsageAggregates
$params = @{
ReportedStartTime = $FromTime
ReportedEndTime = $ToTime
AggregationGranularity = $Interval
ShowDetails = $true
}
## Only use the ContinuationToken parameter if this is not the first run
if ((Get-Variable -Name usageData -ErrorAction Ignore) -and $usageData) {
Write-Verbose -Message "Querying usage data with continuation token $($usageData.ContinuationToken)..."
$params.ContinuationToken = $usageData.ContinuationToken
}
$usageData = Get-UsageAggregates @params
$usageData.UsageAggregations | Select-Object -ExpandProperty Properties
} while ('ContinuationToken' -in $usageData.psobject.properties.name -and $usageData.ContinuationToken)
}
完成的脚本(复制/粘贴)
将参数和功能代码放在一起后,您将获得一个完整的脚本,如下所示。您现在可以将其复制到您自己的脚本中或直接复制到 PowerShell 控制台中进行测试。
Function Get-AzureUsage {
[CmdletBinding()]
param(
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[datetime]$FromTime,
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[datetime]$ToTime,
[Parameter()]
[ValidateNotNullOrEmpty()]
[ValidateSet('Hourly', 'Daily')]
[string]$Interval = 'Daily'
)
Write-Verbose -Message "Querying usage data [$($FromTime) - $($ToTime)]..."
$usageData = $null
do {
$params = @{
ReportedStartTime = $FromTime
ReportedEndTime = $ToTime
AggregationGranularity = $Interval
ShowDetails = $true
}
if ((Get-Variable -Name usageData -ErrorAction Ignore) -and $usageData) {
Write-Verbose -Message "Querying usage data with continuation token $($usageData.ContinuationToken)..."
$params.ContinuationToken = $usageData.ContinuationToken
}
$usageData = Get-UsageAggregates @params
$usageData.UsageAggregations | Select-Object -ExpandProperty Properties
} while ('ContinuationToken' -in $usageData.psobject.properties.name -and $usageData.ContinuationToken)
}
使用我们的函数查询资源使用情况
现在是测试该功能的时候了。将上面的代码粘贴到脚本中,然后点源将其粘贴到当前的 PowerShell 会话中,或者将代码直接复制到 PowerShell 会话中。
提示:如果您使用 PowerShell ISE 或 Visual Studio Code,您可以突出显示要导入的代码并按 F8。否则,将代码复制并粘贴到 PowerShell 会话中会更容易。
现在运行该函数,为 FromTime
、ToTime
以及您希望查看结果的时间间隔提供值。您可以在下面查看有关如何调用此函数的示例。
$usage = Get-AzureUsage -FromTime '08-12-19' -ToTime '09-12-19' -Interval Hourly -Verbose
运行后,如果您选择使用可选的 Verbose
参数,您将看到一些详细消息。从下面的示例中可以看出,使用情况报告计数为 4,659。您还会注意到该函数运行了 Get-UsageAggregates 函数四次,每次都获取下一页结果。该函数之所以能够做到这一点,是因为它为每次调用使用了正确的 ContinuationToke
值。
过滤报告
此时,报告包含有关所有可用资源类型的所有使用情况详细信息。但您可以过滤报告以仅显示您想要的资源。为此,您可以扩展该函数以允许此功能,或者将输出通过管道传输到其他 PowerShell cmdlet。
Get-Azure
函数的输出返回所有资源类型,但包括名为 MeterCategory
的属性。此属性定义行代表的资源类型。例如,要仅获取 Azure 虚拟机使用情况报告,您可以使用 Group-Object
将所有对象与 Virtual Machines
的 MeterCategory
分组在一起代码> cmdlet。
Group-Object
cmdlet 将返回输出中存在的行数作为 Count
属性。然后,将输出限制为仅 Count
和 Name
属性(MeterCategory
的值),您可以看到所有存在的使用情况报告行数Azure 资源类型。
正如您在下面的屏幕截图中看到的,报告中有 768 个虚拟机条目。
为了进一步发展这个过滤概念,您还可以利用计算属性来创建更友好的输出,如下所示。
$usage | Where-Object {$_.MeterCategory -eq 'Virtual Machines'} | `
Format-Table UsageStartTime,UsageEndTime,@{n="VM Name";e={(($_.InstanceData | `
ConvertFrom-Json).'Microsoft.Resources'.resourceURI -split "/")[-1]}},Quantity,Unit
当您运行上面的代码片段时,您应该看到与下面类似的输出。
扩展报告的想法
使用本文中的代码,您可以通过多种不同的方式扩展刚刚创建的工具的功能。
您可以将输出导出到 CSV 文件,并在 Excel 中操作数据,或者使用 ConvertTo-HTML 或增强型 HTML2 PowerShell 模块创建 HTML 报告。
更进一步,使用 Send-MailMessage cmdlet 向结果添加电子邮件通知。世界是你的牡蛎!
总结
在本文中,你了解了如何从 Azure 检索资源使用情况报告。您还学习了如何构建自定义 PowerShell 函数来自动化该过程并使用该函数来操作输出。
下次当您收到预期的 Azure 账单时,您没有任何借口!自己构建一个 PowerShell 函数,可以随时查询 Azure 资源使用情况,随时关注账单情况。
进一步阅读
- 如何使用 PowerShell 删除 Microsoft Azure 虚拟机并进行清理
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag