Перечисление PSCustomObject

Кто-нибудь знает способ "взломать" открыть источник хеш-таблицы из пользовательского объекта. В пользовательском объекте нет.getenumerrator, но у меня есть эта хеш-таблица: @{0=0.05; = 0,050 тысячу двадцать-четыря; 51200 = 0,050; 512000 = 0,050; 1024000 = 0,045; 5120000 = 0,037}. Я извлекаю эту информацию через API-интерфейс REST Azure RateCard, и мне необходимо разбить ее, чтобы у меня был доступ к каждому уровню тарифов, чтобы получить точный отчет о стоимости использования. Какие-либо предложения? Пример выходов:

MeterId          : d23a5753-ff85-4ddf-af28-8cc5cf2d3882
MeterName        : Standard IO - Page Blob/Disk (GB)
MeterCategory    : Storage
MeterSubCategory : Locally Redundant
Unit             : GB
MeterTags        : {}
MeterRegion      : 
MeterRates       : @{0=0.05; 1024=0.050; 51200=0.050; 512000=0.050; 1024000=0.045; 5120000=0.037}
EffectiveDate    : 2014-02-01T00:00:00Z
IncludedQuantity : 0.0

 TypeName: System.Management.Automation.PSCustomObject

Name             MemberType   Definition                                                                                                                           
----             ----------   ----------                                                                                                                           
Equals           Method       bool Equals(System.Object obj)                                                                                                       
GetHashCode      Method       int GetHashCode()                                                                                                                    
GetType          Method       type GetType()                                                                                                                       
ToString         Method       string ToString()                                                                                                                    
EffectiveDate    NoteProperty System.String EffectiveDate=2014-02-01T00:00:00Z                                                                                     
IncludedQuantity NoteProperty System.Decimal IncludedQuantity=0.0                                                                                                  
MeterCategory    NoteProperty System.String MeterCategory=Storage                                                                                                  
MeterId          NoteProperty System.String MeterId=d23a5753-ff85-4ddf-af28-8cc5cf2d3882                                                                           
MeterName        NoteProperty System.String MeterName=Standard IO - Page Blob/Disk (GB)                                                                            
MeterRates       NoteProperty System.Management.Automation.PSCustomObject MeterRates=@{0=0.05; 1024=0.050; 51200=0.050; 512000=0.050; 1024000=0.045; 5120000=0.037}
MeterRegion      NoteProperty System.String MeterRegion=                                                                                                           
MeterSubCategory NoteProperty System.String MeterSubCategory=Locally Redundant                                                                                     
MeterTags        NoteProperty System.Object[] MeterTags=System.Object[]                                                                                            
Unit             NoteProperty System.String Unit=GB                         

3 ответа

Решение

Нашел этот код по похожему вопросу. Решает мою проблему:

$js | Get-Member -MemberType NoteProperty).Name

Не уверен, что вы подразумеваете под взломом, но это должно дать вам ключи:

$object.MeterRates.keys

Это даст вам значения:

$object.MeterRates.keys | % {$object.MeterRates[$_]}

Вы после общей стоимости? Я предполагаю, что это может быть что-то вроде этого:

($object.MeterRates.keys | % {$object.MeterRates[$_] * $_} | Measure-Object -Sum).Sum

Возможно, есть лучший способ сделать это, но моя конкретная версия взлома powershell произвела что-то вроде этого -

$a = "@{0=0.05; 1024=0.050; 51200=0.050; 512000=0.050; 1024000=0.045; 5120000=0.037}"

$b = ConvertFrom-StringData `
        -StringData $a.Replace("; ","`n").Replace("@","").Replace("{","").Replace("}","")

Это предполагает, что вся строка доступна, замените точки с запятой на новые строки, обрежьте другие биты и передайте ее ConvertFrom-StringData

Другие вопросы по тегам