繁体   English   中英

Powershell systeminfo为JSON或XML

[英]Powershell systeminfo as JSON or XML

我正在执行:

   systeminfo | ConvertTo-Json 

   "Host Name:                 namehere",
   "OS Name:                   Microsoft Windows 10 Enterprise",
    ...

但是我需要

   "Host Name":                 "namehere",
   "OS Name":                   "Microsoft Windows 10 Enterprise",
    ...

以下命令给出了类似的问题

systeminfo | ConvertTo-Xml -As String

<?xml version="1.0" encoding="utf-8"?>
<Objects>
  <Object Type="System.String"></Object>
  <Object Type="System.String">Host Name:                 namehere</Object>
  <Object Type="System.String">OS Name:                   Microsoft Windows 10 Enterprise</Object> " 

但我需要这样的东西:

    <?xml version="1.0" encoding="utf-8"?>
    <HostName>namehere</HostName>
    <OSName>Microsoft Windows 10 Enterprise</OSName> 
    ...

尝试这个:

systeminfo /fo CSV | ConvertFrom-Csv

要么

systeminfo /fo CSV | ConvertFrom-Csv | convertto-json

为了补充托马斯·舒马赫的有用答案

在PSv5 +中,您也可以使用Get-ComputerInfo

尽管所得的[Microsoft.PowerShell.Commands.ComputerInfo]实例中的字段(属性)名称与systeminfo输出中的字段名称不同,但是您可能会在此处获得更多信息。

由于Get-ComputerInfo输出的对象的属性包含该信息,因此您可以将其直接发送到ConvertTo-Json / ConvertTo-Xml

Get-ComputerInfo | ConvertTo-Json

至于你尝试什么

诸如systeminfo外部程序只能输出文本 ,并且通常以(半) 非结构化形式进行输出,这种形式更适合于人类查看,而不是进一步的程序处理。

相比之下,为了从ConvertTo-Json / ConvertTo-Xml获得有意义的输出,您需要结构化的文本格式( systeminfo恰巧通过其/FO选项提供)或输入对象 (这是PowerShell的cmdlet输出)。

因此,通常最好是寻找外部程序的PowerShell替代方案。 如果它们都不存在,并且如果外部程序不提供结构化文本输出,则您必须求助于自己的文本分析,以强加结构,这既脆弱又麻烦。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM