Как удалить фигурные скобки из вывода PowerShell

Это касается диспетчера сертификатов AWS:

Get-ACMCertificatelist | Get-ACMCertificateDetail | Select -ExpandProperty renewalsummary | Where-object {$_.renewalStatus -ne "Success"} 

Ниже приводится результат, и я хочу удалить эти фигурные скобки:

DomainValidationOptions                   RenewalStatus       
-----------------------                   -------------       
{Certificate1}                         PENDING_AUTO_RENEWAL
{certificate2}                         PENDING_AUTO_RENEWAL

person user8172425    schedule 16.06.2017    source источник


Ответы (3)


Рассматриваемый объект фактически предоставляет вам массив для части DomainValidationOptions, который может содержать более одного значения.

| Select @{n="DomainValidationOptions";e={($_.DomainValidationOptions -join ",")}},RenewalStatus

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

person colsw    schedule 16.06.2017
comment
Ниже приводится неверный результат: DomainValidationOptions RenewalStatus ----------------------- ------------- Amazon. CertificateManager.Model.DomainValidation PENDING_AUTO_RENEWAL Amazon.CertificateManager.Model.DomainValidation PENDING_AUTO_RENEWAL - person user8172425; 16.06.2017
comment
@ user8172425 Тогда вам нужно будет сделать $_.DomainValidationOptions.Something - найдите .Something, который содержит фактическую строку, вы можете получить это, запустив Select -Expand DomainValidationOptions - person colsw; 19.06.2017

Они автоматически добавляются при преобразовании коллекции в строку в командлетах форматирования. Вы можете самостоятельно отформатировать объекты, чтобы от них избавиться.

person Joey    schedule 16.06.2017
comment
Я новичок в PowerShell. Есть ли какой-нибудь образец кода для их форматирования? - person user8172425; 16.06.2017
comment
Я понятия не имею, как выглядят ваши объекты (в отношении свойств и структуры вложенности), поэтому я не могу дать вам пример кода. - person Joey; 16.06.2017
comment
Имя MemberType Определение ---- ---------- ---------- DomainValidationOptions Свойство System.Collections.Generic.List [Amazon.CertificateManager.Model.DomainValidation] DomainValidationOptions {get; set ;} - person user8172425; 16.06.2017
comment
Свойство RenewalStatus Amazon.CertificateManager.RenewalStatus RenewalStatus {get; set;} - person user8172425; 16.06.2017

Вы можете указать вычисляемые свойства для каждого из свойств DomainValidationOptions, которые вы хотите углубиться в.

Шаг 1) Откройте для себя свойства

Подключите DomainValidationOptions к Get-Member -MemberType Property, чтобы увидеть, с какими свойствами вы собираетесь работать:

Get-ACMCertificateList |
Get-ACMCertificateDetail |
Select -ExpandProperty RenewalSummary |
Select -ExpandProperty DomainValidationOptions |
Get-Member -MemberType Property


   TypeName: Amazon.CertificateManager.Model.DomainValidation

Name             MemberType Definition
----             ---------- ----------
DomainName       Property   string DomainName {get;set;}
ValidationDomain Property   string ValidationDomain {get;set;}
ValidationEmails Property   System.Collections.Generic.List[string] ValidationEmails {get;set;}
ValidationStatus Property   Amazon.CertificateManager.DomainStatus ValidationStatus {get;set;}

Шаг 2) Сделайте запрос

В качестве примера допустим, что мы хотим получить только DomainName и ValidationDomain. Мы бы добавили два вычисляемых свойства для каждого из этих свойств, а затем просто сделали бы обычный выбор для RenewalStatus в объекте RenewalSummary:

Get-ACMCertificateList | 
Get-ACMCertificateDetail | 
Select -ExpandProperty RenewalSummary | 
Where-object {$_.RenewalStatus -ne "Success"} |
Select @{N='DomainName';E={$_.DomainValidationOptions.DomainName}}, `
       @{N='ValidationDomain';E={$_.DomainValidationOptions.ValidationDomain}}, `
       RenewalStatus

Пример вывода:

DomainName                 ValidationDomain           RenewalStatus
----------                 ----------------           -------------
*.subdomain.mydomain.com   mydomain.com               PENDING_AUTO_RENEWAL
mything.mydomain.com       mydomain.com               PENDING_AUTO_RENEWAL

Вы можете выполнить аналогичную операцию для ValidationEmails, я не включил ее в этот пример, потому что это сделало бы слишком много свойств для правильного форматирования в Stack Overflow. Если вы хотите развернуть коллекцию и преобразовать ее в строку, ее вычисляемое свойство будет выглядеть примерно так:

@{N='ValidationEmails';E={$_.DomainValidationOptions.ValidationEmails -join ','}}

Дальнейшее чтение

person Anthony Neace    schedule 28.06.2017