Powershell systeminfo为JSON或XML

时间:2018-03-22 20:12:48

标签: json xml powershell scripting

我正在执行:

   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 个答案:

答案 0 :(得分:4)

试试这个:

systeminfo /fo CSV | ConvertFrom-Csv

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

答案 1 :(得分:2)

补充thom schumacher's helpful answer

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

虽然生成的Get-ComputerInfo个实例中的字段(属性)名称与ConvertTo-Json的输出中的字段名称相同,但您可能会得到<那里有其他信息。

由于ConvertTo-Xml输出其属性包含信息的对象,您可以将直接发送到Get-ComputerInfo | ConvertTo-Json / systeminfo < / p>

ConvertTo-Json

至于您尝试的内容

ConvertTo-Xml之类的外部程序只能输出文本,并且通常以(半)非结构化形式输出,这种形式更适合人类观看进一步的程序化处理。

相比之下,为了从systeminfo / /FO获得有意义的输出,您需要结构化文本格式 - <properties> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties> 恰好通过其java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/compoT7]] at java.util.concurrent.FutureTask.report(FutureTask.java:122) at java.util.concurrent.FutureTask.get(FutureTask.java:188) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1119) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:819) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1571) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1561) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/compoT7]] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162) ... 6 more Caused by: java.lang.UnsupportedClassVersionError: org/springframework/web/SpringServletContainerInitializer : Unsupported major.minor version 52.0 (unable to load class org.springframework.web.SpringServletContainerInitializer) at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:3209) at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:1373) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1861) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1735) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:278) at org.apache.catalina.startup.WebappServiceLoader.loadServices(WebappServiceLoader.java:197) at org.apache.catalina.startup.WebappServiceLoader.load(WebappServiceLoader.java:158) at org.apache.catalina.startup.ContextConfig.processServletContainerInitializers(ContextConfig.java:1579) at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1280) at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:888) at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:388) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5522) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) ... 6 more 选项 - 或输入对象,这是您获得PowerShell的cmdlet输出。

因此,寻找PowerShell替代外部程序通常会更好;如果它们都没有,并且如果外部程序不提供结构化文本输出,则必须使用自己的文本解析来强加结构,这可能既脆弱又麻烦。