处理自定义对象中的哈希表

时间:2017-01-31 02:19:11

标签: powershell

我们的监控系统有一个REST API,我试图从中检索属性,然后将它们输出到自定义对象。一些属性值是哈希表。

除了保留自定义对象以供在Powershell中使用之外,我想将它们导出为CSV,所以我需要那些哈希表是其他东西,所以我最终不会在那些中使用Syste.Object []列。

从API返回的对象看起来像这样(截断):

$allServices[0]

alertStatus               : none
ignoreSSL                 : True
description               : Test service
stopMonitoring            : False
stopMonitoringByFolder    : False
useDefaultLocationSetting : False
serviceProperties         : {}
transition                : 1
alertStatusPriority       : 100000
serviceFolderId           : 1
script                    :
disableAlerting           : False
individualAlertLevel      : warn
checkpoints               : {@{id=1; geoInfo=Overall; smgId=0}, @{id=2; geoInfo=US - Los Angeles; smgId=1}, @{id=3; geoInfo=US - Washington DC; smgId=2}, @{id=4; geoInfo=US - San Francisco; smgId=3}...}
pageLoadAlertTimeInMS     : 30000
sdtStatus                 : none-none-none
serviceStatus             : alive
method                    : tabledriven
id                        : 1

然后检查点看起来像这样:

$allServices[0].checkpoints

id geoInfo            smgId
-- -------            -----
 1 Overall                0
 2 US - Los Angeles       1
 3 US - Washington DC     2
 4 US - San Francisco     3
 5 Europe - Dublin        4
 6 Asia - Singapore       5

处理检查点属性的最佳方法是什么?

感谢。

2 个答案:

答案 0 :(得分:1)

checkpoints(可能还有serviceProperties)转换为JSON字符串。

$allServicesCSV = foreach ($srv in $allServices) {
    $srv = $srv.PSObject.Copy() # shallow copy
    $srv.checkpoints = ConvertTo-Json $srv.checkpoints -Compress
    $srv
}

答案 1 :(得分:0)

嗯,需求发生了变化,所以我只需要输出到json / XML而不是CSV,这样就更容易了。感谢。