azure - 在 foreach 中使用 if 时 Powershell 获得相同的值
问题描述
我正在尝试从 Azure 获取指标到 Zabbix。
问题是 VM 的 Metric 由 2 个单词组成:Percentage CPU
,而 Zabbix 不允许项目键由 2 个单词组成。我也尝试过Percentage%20CPU
,但在 Zabbix 中出现错误,我创建了 Zabbix key percentage_cpu
。
所以我决定事先将数据从 Zabbix 发送到 Azure 以“翻译”percentage_cpu
为Percentage%20CPU
. 如果仅存在该键,则此方法非常有用,但是当我添加另一个键(在此示例 SQL 指标中)时,问题就开始了。
对于 SQL 指标,所有值都在一个词中 - 无需更改任何内容,但随后 VM 指标也分配给 SQL。我试图避免为每个服务编写单独的文件
$host_items = Get-ZabbixHostItems -url $zabbix_url -auth $zabbix_auth -
zabbix_host $host_name
foreach ($host_item in $host_items)
{
#$host_item_details = select-string -InputObject $host_item.key_ -Pattern '^(azure\.sql)\.(.*)\.(.*)\[\"(.*)\"\]$';
$host_item_details = select-string -InputObject $host_item.key_ -Pattern '^(azure\.\w{2,})\.(.*)\.(.*)\[\"(.*)\"\,(.*)]$';
#$host_item_details = select-string -InputObject $host_item.key_ -Pattern '^(azure)\.(.*)\.(.*)\.(.*)\[\"(.*)\"\,(.*)]$';
$host_item_provider = $host_item_details.Matches.groups[1];
$host_item_metric = $host_item_details.Matches.groups[2];
$host_item_timegrain = $host_item_details.Matches.groups[3];
$host_item_resource = $host_item_details.Matches.groups[4];
$host_item_suffix = $host_item_details.Matches.groups[5];
if ($host_item_metric='percentage_cpu')
{$host_item_metric='Percentage%20CPU'}
else
{ $host_item_metric = $host_item_details.Matches.groups[2];}
#}
$uri = "https://management.azure.com{0}/providers/microsoft.insights/metrics?api-version={1}&interval={2}×pan={3}&metric={4}" -f `
$host_item_resource, `
"2017-05-01-preview", `
$host_item_timegrain.ToString().ToUpper(), `
$($(get-date).ToUniversalTime().addminutes(-15).tostring("yyyy-MM-ddTHH:mm:ssZ") + "/" + $(get-date).ToUniversalTime().addminutes(-2).tostring("yyyy-MM-ddTHH:mm:ssZ")), `
$host_item_metric;
write-host $uri;
}
hostitems_的输出
azure.sql.dtu_consumption_percent.pt1m["/subscriptions/111-222/resourceGroups/rg/providers/Microsoft.Sql/servers/mojsql/databases/test",common]
azure.vm.percentage_cpu.pt1m["/subscriptions/111-222/resourceGroups/rg/providers/Microsoft.Compute/virtualMachines/test",common]
当我在上面运行代码时,我得到了这些 URI
https://management.azure.com/subscriptions/111-222/resourceGroups/rg/providers/Microsoft.Sql/servers/mojsql/databases/test/providers/microsoft.insights/m
etrics?api-version=2017-05-01-preview&interval=PT1M×pan=2018-08-11T07:38:05Z/2018-08-11T07:51:05Z&metric=Percentage%20CPU
https://management.azure.com/subscriptions/111-222/resourceGroups/rg/providers/Microsoft.Compute/virtualMachines/test/providers/microsoft.insights/metric
s?api-version=2017-05-01-preview&interval=PT1M×pan=2018-08-11T07:38:05Z/2018-08-11T07:51:05Z&metric=Percentage%20CPU
对于第一个链接(SQL)指标应该是dtu_consumption
,但我得到两个链接的相同指标
第二次尝试:
if ($host_item_metric -eq 'percentage_cpu')
{$host_item_metric='Percentage%20CPU';}
else
{ $host_item_metric = $host_item_details.Matches.groups[2];}
write-host $host_item_metric
}
输出:(原始值)
dtu_consumption_percent
percentage_cpu
解决方案
不得不使用 -like
if ($host_item_metric -like 'percentage_cpu')
{$host_item_metric='Percentage%20CPU';}
else
{ $host_item_metric = $host_item_details.Matches.groups[2]}
推荐阅读
- javascript - 如何实现可调整大小和自动隐藏侧边菜单
- nfc - ACR122U NFC 读卡器在卡为只读时无法正确读取 ISO14443 卡
- c++ - 如果分隔符是输入范围的最后一个元素,为什么 views::split 会忽略分隔符后的空子范围?
- html - 如何在页面上的其他内容下正确定位 HTML 元素?
- informatica - Informatica Cloud 中的文件侦听器
- php - 我将如何只让用户类型“管理员”访问我的 PHP 项目中的某些页面?
- python - 如何在 Django 视图页面中显示外键数据?
- ios - 模态视图中的 SwiftUI 返回值
- java - Spring Boot:特定于 bean 创建配置文件
- python - 在 Python 中查找特定字符串之前的 9 个字符