Как получить доступ к встроенным объектам и? - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь создать отчет, в котором я получаю данные и хочу сравнить их где-нибудь еще.Я могу получить доступ к большей части данных, но не к встроенным материалам.Я пытался понять это, но мне нужна помощь.

Ниже приведен цикл.Я хочу иметь возможность тянуть, например, парами, например.

Размер защищенных данных по контракту (ТБ) и 12.0

Итак, я понимаю, что существует соединение, но не знаю, какадрес или доступ.Я знаю, что могу сделать что-то вроде.Итак ... $_.questions получает мне эти данные, но я знаю, как просто получить нужные мне пары.

'Select-Object{$_.id,$_.name,$_.backupBillableSpaceGb,$_.company.name,$_.questions}'

id                     : 20221
name                   : LANVault Backup Profile
type                   : @{id=72; name=Backup Profile; _info=}
status                 : @{id=1; name=Active; _info=}
company                : @{id=15412; identifier=ACME, INC; name=ACME;             
_info=}
contact                : @{id=40760; name=Dave ROTH; _info=}
site                   : @{id=14657; name=Main; _info=}
locationId             : 2
businessUnitId         : 10
installationDate       : 2018-04-18T00:00:00Z
warrantyExpirationDate : 2019-04-18T00:00:00Z
billFlag               : True
backupSuccesses        : 0
backupIncomplete       : 0
backupFailed           : 0
backupRestores         : 0
backupBillableSpaceGb  : 0.00
backupYear             : 0
backupMonth            : 0
questions              : {@{answerId=131586; questionId=655; 
question=Contracted Protected Data Size (TB); answer=12.0; 
sequenceNumber=1.00; numberOfDecimals=1; fieldType=Number; 
requiredFlag=True},
@{answerId=131589; questionId=656; question=Contracted # of
Protected Servers; answer=2; sequenceNumber=2.00;
numberOfDecimals=0; fieldType=Number; requiredFlag=True},
@{answerId=131591; questionId=657; question=Additional
Protected Data Cost: ($/TB/Mo.); answer=300.0;
sequenceNumber=3.00; numberOfDecimals=0; fieldType=Currency;
requiredFlag=True}, @{answerId=131592; questionId=658;
question=Additional Server Cost: ($/Server/Mo.); answer=60.0;
sequenceNumber=4.00; numberOfDecimals=0; fieldType=Currency;
requiredFlag=True}...}

1 Ответ

0 голосов
/ 28 марта 2019

Итак, у вас есть объект, где значением свойства является массив объектов. Как вы хотите вывести это? Вы можете использовать Select-Object для создания пользовательского объекта, определяющего свойства на основе исходного объекта, или вы можете перебирать объекты в цикле ForEach-Object и создавать объекты таким образом. Я приведу примеры каждого из них.

Select-Object метод:

$SourceObject | Select ID,name,backupBillableSpaceGb,@{l='CompanyName';e={$_.company.name}},@{l='Contracted Protected Data Size (TB)';e={$_.questions|Where{$_.question -eq 'Contracted Protected Data Size (TB)'}|Select -expand answer}}

Это делает очень длинные строки и становится действительно трудным для чтения, но оно сохраняет все это встроенными. В этих примерах я построил свойства в формате @{label='Property Name';expression={Property Value}}, используя более короткие «l» для «label» и «e» для «expression».

ForEach-Object метод:

$SourceObject | ForEach{
    [PSCustomObject]@{
        ID = $_.id
        Name = $_.name
        CompanyName = $_.company.name
        'Contracted Protected Data Size (TB)' = $_.questions|Where{$_.question -eq 'Contracted Protected Data Size (TB)'}|Select -expand answer
    }
    }

Это должно создать тот же вывод, но обычно его легче читать. Хотя это занимает гораздо больше места.

Это, однако, имеет некоторые преимущества, такие как: Если это становится очень медленным, из-за необходимости многократно проходить по массиву $_.questions, вы можете создать хеш-таблицу из этого массива и ссылаться на нее, если хотите.

$SourceObject | ForEach{
    $QuestionsHT = @{}
    $_.questions | ForEach{$QuestionsHT.Add($_.question,$_.answer)}
    [PSCustomObject]@{
        ID = $_.id
        Name = $_.name
        CompanyName = $_.company.name
        'Contracted Protected Data Size (TB)' = $QuestionsHT.'Contracted Protected Data Size (TB)'
        'Additional Protected Data Cost: ($/TB/Mo.)' = $QuestionsHT.'Additional Protected Data Cost: ($/TB/Mo.)'
    }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...