2017-08-15 66 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