ConvertFrom-String和ghost属性

时间:2017-08-15 20:48:29

标签: string powershell csv

我正在获取服务器的固件信息,我将其放在变量$t中,但它以字符串的形式出现。我(几乎)成功地将其组织成一个对象,以便将其导出为CSV,但我需要帮助解决一些问题。

我目前的主要问题是,似乎使用ConvertFrom-String4.10改为42017/04/06改为4/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          : 

提前致谢。

2 个答案:

答案 0 :(得分: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 :(得分: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