使用Powershell将systeminfo转换为JSON或XML

3
我正在执行以下操作:
   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> 
    ...
2个回答

8
尝试这个:
systeminfo /fo CSV | ConvertFrom-Csv

或者

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

3

为了补充thom schumacher的有用答案:

在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 替代方案;如果没有替代方案,并且外部程序没有提供结构化文本输出,则必须自己进行文本解析以强制实施结构,这可能既脆弱又繁琐。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接