2017-08-15 56 views
1

我得到一个服务器的固件信息,我把它放在一个变量$t中,但它是以字符串的形式。我已经(几乎)成功地将它结构化为一个对象,以便将其导出为CSV格式,但有一些我需要帮助的扭结。ConvertFrom-String和ghost属性

我当时的主要问题是,它似乎像使用ConvertFrom-String变化的东西像4.1042017/04/064/6/2017 12:00:00 AM。有没有办法解决?

另一个问题是幽灵属性P6即使我没有明确要求它出现。我之后通过删除它来处理这个问题,但是我想知道如果我做错了什么来产生它。

PS C:\Users\user> $t.Output 
system> Type      Status  Version  BuildID   ReleaseDate 
----      ------  -------  -------   ----------- 
IMM2(Primary)   Active  4.10   TCOO32C   2017/04/06 
IMM2(Backup)    Inactive  3.70   TCOO26H   2016/11/29 
UEFI(Primary)   Active  2.40   TCE130J   2017/04/11 
UEFI(Backup)    Inactive  2.40   TCE130J   2017/04/11 
DSA      Active  10.2   DSALA8N   2016/10/28 
system> 

PS C:\Users\user> $t.Output | ConvertFrom-String -PropertyNames 'Type', 'Status', 'Version', 'Build', 'ReleaseDate' | Select-Object -Index 2,4 

Type  : IMM2(Primary) 
Status  : Active 
Version  : 4 
Build  : TCOO32C 
ReleaseDate : 4/6/2017 12:00:00 AM 
P6   : 

Type  : UEFI(Primary) 
Status  : Active 
Version  : 2 
Build  : TCE130J 
ReleaseDate : 4/11/2017 12:00:00 AM 
P6   : 

在此先感谢。

+0

什么是输出'$ t.Output.GetType()。FullName'? –

+0

@AnsgarWiechers该行的输出是'System.String []' – rafvasq

回答

2

从模拟输出替换阻碍因素后,
ConvertFrom-Csv可以完成自己的工作(当时还是你的样品中丢失)

$toutput= @" 
system> Type      Status  Version  BuildID   ReleaseDate 
----      ------  -------  -------   ----------- 
IMM2(Primary)   Active  4.10   TCOO32C   2017/04/06 
IMM2(Backup)    Inactive  3.70   TCOO26H   2016/11/29 
UEFI(Primary)   Active  2.40   TCE130J   2017/04/11 
UEFI(Backup)    Inactive  2.40   TCE130J   2017/04/11 
DSA      Active  10.2   DSALA8N   2016/10/28 
system> 
"@ 

$toutput -replace 'system> *' -replace '(--+\s+)+' -replace '\s{2,}',',' | 
    ConvertFrom-CSV | Format-Table -auto 

Type   Status Version BuildID ReleaseDate 
----   ------ ------- ------- ----------- 
IMM2(Primary) Active 4.10 TCOO32C 2017/04/06 
IMM2(Backup) Inactive 3.70 TCOO26H 2016/11/29 
UEFI(Primary) Active 2.40 TCE130J 2017/04/11 
UEFI(Backup) Inactive 2.40 TCE130J 2017/04/11 
DSA   Active 10.2 DSALA8N 2016/10/28 
+1

@ImagineThat您发布了一个新问题,但您是否尝试过这种解决方案?如果$ t.ouput类型是字符串,它应该工作。 – LotPings

1

12:00AM4.104的东西正在发生,因为ConvertFrom-String设置项目的类型,DateTime的日期和一个int状态。

要解决此问题,您可以使用-TemplateContent参数明确设置所需的类型,在此情况下为字符串。

$template = @' 
{Name*:IMM2(Primary)} {Status:Active} {[string]Version:4.10} {BuildID:TCOO32C} {[string]ReleaseDate:2017/04/06} 
{Name*:UEFI(Primary)} {Status:Inactive} {[string]Version:10.2} {BuildID:DSALA8N} {[string]ReleaseDate:2016/10/28} 
{Name*:DSA} {Status:Inactive} {[string]Version:10.2} {BuildID:DSALA8N} {[string]ReleaseDate:2016/10/28} 
'@ 

$data | ConvertFrom-String -TemplateContent $template -OutVariable out_data 
$out_data