【Azure Developer】使用 Azure PowerShell 执行 Azure 表存储操作时遇见的4个问题
要使用PowerShell操作Azure的表存储,需要经过以下步骤:
1:必须安装 Az
和 AzTable 模块。安装命令为:
#安装 Az 模块 Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force #安装 AzTable 模块 Install-Module AzTable
2:创建一个context,命令如下:
$Context = New-AzStorageContext -StorageAccountName "xxxx" -StorageAccountKey "xxxx"
3:使用Get-AzStorageTable -Context $Context 这个命令可以get到当前存储账户的所有table的名字
Get-AzStorageTable -Context $Context
4:若要使用 AzTable 对表执行操作,需要引用特定表的 CloudTable 属性。并使用 Get-AzTableRow 获取表数据
$cloudTable = (Get-AzStorageTable -Name $tableName -Context $ctx).CloudTable #使用下面的命令查询表实体 Get-AzTableRow -table $cloudTable | ft
但是,在使用时,先后遇见了以下4个问题:
问题一:如果只有存储账户名称,不提供存储账户所属资源组和存储账户访问密钥的情况下,如何查询存储账户中的诊断指标数据呢? New-AzStorageContext和Get-AzStorageAccount这两个命令,一个需要提供访问密钥,另一个需要提供资源组
【答】New-AzStorageContext如果不提供秘钥,可以为匿名存储帐户创建上下文,具体可参考文档:https://docs.microsoft.com/en-us/powershell/module/az.storage/new-azstoragecontext?view=azps-5.7.0
New-AzStorageContext -StorageAccountName "xxx" -Anonymous -Protocol "http"
Get-AzStorageAccount 这个命令如果不提供资源组,可以直接使用这条命令,会get到当前订阅下的所有storage,具体可参考文档:https://docs.microsoft.com/en-us/powershell/module/az.storage/Get-azStorageAccount?view=azps-5.7.0
问题二:需要从table中查询一个完整月度的数据,但是存储账户中是把数据存储到了多个表中,且有的表会同时存储上下两个月相邻时间的数据,请问有有什么更简便的方法来查询某一个月的数据吗?是否有参数来过滤时间呢?table中Timestamp字段使用的是UTC时间、还是本地时间?
【答】1)是不能联合获取的,只能是一个表一个表获取。 2)平台使用的是UTC时间,就是北京时间-8,例如:UTC时间2021-05-20T02:52:57Z对应的北京时间就是10:52:57。时间格式可参考文档:https://docs.microsoft.com/zh-cn/rest/api/storageservices/formatting-datetime-values
问题三: 从某一个table中查询指定几列的数据,查询条件是多个列值的组合。使用命令Get-AzTableRow -table $cloudTable | ft 返回的数据量太大
【答】在Get-AzTableRow -table $cloudTable ` 后面加上要查询的列名即可,设置列名可参考文档:https://docs.azure.cn/zh-cn/storage/tables/table-storage-how-to-use-powershell#retrieve-entities-for-a-specific-value-in-a-specific-column
Get-AzTableRow -table $cloudTable -partitionKey $partitionKey | ft
如果想使用过滤条件显示指定的行,可以使用-SelectColumn参数 Get-AzTableRow -Table $cloudTable -SelectColumn @('CounterName', 'Role','Maximum','Minimum'),同时多次测试发现下面截图中红色区域的4个参数即使不指定默认也是查询之后必带的参数
同时 Get-AzTableRow -table $cloudTable -partitionKey $partitionKey 也是可以使用的
问题四: 使用-SelectColumn参数出错
SelectColumn参数问题原因时AzTable安装的并不是最新版本(2.0.4),更新了module后,版本2.1.0再使用SelectColumn参数是正常的。
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!