代码之家  ›  专栏  ›  技术社区  ›  Thufir

如何使用Powershell将进程写入XML文件?

  •  0
  • Thufir  · 技术社区  · 6 年前

    如何写出 csv.ps1

    csv.ps1

    Get-Process | Export-Csv -Path .\Processes.csv -NoTypeInformation
    

    进程.csv,运行后 csv.ps1

    "writeback","0",,"0","0","0","0",,"System.Diagnostics.Process (kthreadd)",,"0",,,,,"Process","Microsoft.Win32.SafeHandles.SafeProcessHandle","30","-20",,"False","2019-03-16 7:37:18 a.m.",,"30",".","9223372036854775807","0","System.Diagnostics.ProcessModuleCollection","0","0","0","0","0","0","0","0","0","0","0","0","False","RealTime","0","0","writeback","3","0",,"System.Diagnostics.ProcessThreadCollection",,"0","0","False",,,,"0","0",,,"0","","True","00:00:00","00:00:00","00:00:00",,
    "xbrlapi","3233",,"0","0","0","0",,"System.Diagnostics.Process (gnome-session-b)",,"0",,,,,"Process","Microsoft.Win32.SafeHandles.SafeProcessHandle","3419","0",,"False","2019-03-16 7:45:43 a.m.",,"3419",".","9223372036854775807","0","System.Diagnostics.ProcessModuleCollection","0","0","0","0","0","0","0","0","0","0","0","0","False","Normal","0","0","xbrlapi","3","3233",,"System.Diagnostics.ProcessThreadCollection",,"0","0","False",,,,"0","0",,,"0","","True","00:00:00","00:00:00","00:00:00",,
    "xdg-desktop-por","12972","10","573689856","8712192","0","0","/usr/libexec/xdg-desktop-portal","System.Diagnostics.Process (systemd)",,"0.06",,,,,"Process","Microsoft.Win32.SafeHandles.SafeProcessHandle","12972","0",,"False","2019-03-16 10:29:22 a.m.",,"12972",".","9223372036854775807","0","System.Diagnostics.ProcessModuleCollection","0","0","0","0","0","0","0","0","0","0","0","0","False","Normal","0","0","xdg-desktop-por","3","12972",,"System.Diagnostics.ProcessThreadCollection","10","573689856","573689856","False",,,,"8712192","8712192",,"System.Diagnostics.ProcessModule (xdg-desktop-portal)","0","","True","00:00:00.0300000","00:00:00.0600000","00:00:00.0300000",,
    "xdg-desktop-por","13006","10","474832896","16887808","0","0","/usr/libexec/xdg-desktop-portal-gtk","System.Diagnostics.Process (systemd)",,"0.16",,,,,"Process","Microsoft.Win32.SafeHandles.SafeProcessHandle","13006","0",,"False","2019-03-16 10:29:23 a.m.",,"13006",".","9223372036854775807","0","System.Diagnostics.ProcessModuleCollection","0","0","0","0","0","0","0","0","0","0","0","0","False","Normal","0","0","xdg-desktop-por","3","13006",,"System.Diagnostics.ProcessThreadCollection","10","474832896","474832896","False",,,,"16887808","16887808",,"System.Diagnostics.ProcessModule (xdg-desktop-portal-gtk)","0","","True","00:00:00.0200000","00:00:00.1600000","00:00:00.1400000",,
    "xdg-document-po","3375",,"482291712","5652480","0","0",,"System.Diagnostics.Process (systemd)",,"0.08",,,,,"Process","Microsoft.Win32.SafeHandles.SafeProcessHandle","3375","0",,"False","2019-03-16 7:45:42 a.m.",,"3375",".","9223372036854775807","0","System.Diagnostics.ProcessModuleCollection","0","0","0","0","0","0","0","0","0","0","0","0","False","Normal","0","0","xdg-document-po","3","3375",,"System.Diagnostics.ProcessThreadCollection",,"482291712","482291712","False",,,,"5652480","5652480",,,"0","","True","00:00:00","00:00:00.0800000","00:00:00.0800000",,
    "xdg-document-po","12985","8","482291712","5857280","0","0","/usr/libexec/xdg-document-portal","System.Diagnostics.Process (systemd)",,"0.03",,,,,"Process","Microsoft.Win32.SafeHandles.SafeProcessHandle","12985","0",,"False","2019-03-16 10:29:22 a.m.",,"12985",".","9223372036854775807","0","System.Diagnostics.ProcessModuleCollection","0","0","0","0","0","0","0","0","0","0","0","0","False","Normal","0","0","xdg-document-po","3","12985",,"System.Diagnostics.ProcessThreadCollection","8","482291712","482291712","False",,,,"5857280","5857280",,"System.Diagnostics.ProcessModule (xdg-document-portal)","0","","True","00:00:00.0100000","00:00:00.0300000","00:00:00.0200000",,
    "xdg-permission-","3382",,"255184896","4739072","0","0",,"System.Diagnostics.Process (systemd)",,"0",,,,,"Process","Microsoft.Win32.SafeHandles.SafeProcessHandle","3382","0",,"False","2019-03-16 7:45:43 a.m.",,"3382",".","9223372036854775807","0","System.Diagnostics.ProcessModuleCollection","0","0","0","0","0","0","0","0","0","0","0","0","False","Normal","0","0","xdg-permission-","3","3382",,"System.Diagnostics.ProcessThreadCollection",,"255184896","255184896","False",,,,"4739072","4739072",,,"0","","True","00:00:00","00:00:00","00:00:00",,
    "xdg-permission-","12992","7","255184896","4780032","0","0","/usr/libexec/xdg-permission-store","System.Diagnostics.Process (systemd)",,"0",,,,,"Process","Microsoft.Win32.SafeHandles.SafeProcessHandle","12992","0",,"False","2019-03-16 10:29:22 a.m.",,"12992",".","9223372036854775807","0","System.Diagnostics.ProcessModuleCollection","0","0","0","0","0","0","0","0","0","0","0","0","False","Normal","0","0","xdg-permission-","3","12992",,"System.Diagnostics.ProcessThreadCollection","7","255184896","255184896","False",,,,"4780032","4780032",,"System.Diagnostics.ProcessModule (xdg-permission-store)","0","","True","00:00:00","00:00:00","00:00:00",,
    "Xorg","1369",,"490586112","98332672","0","0",,"System.Diagnostics.Process (lightdm)",,"131.97",,,,,"Process","Microsoft.Win32.SafeHandles.SafeProcessHandle","1369","0",,"False","2019-03-16 7:38:02 a.m.",,"1369",".","9223372036854775807","0","System.Diagnostics.ProcessModuleCollection","0","0","0","0","0","0","0","0","0","0","0","0","False","Normal","0","0","Xorg","3","1369",,"System.Diagnostics.ProcessThreadCollection",,"490586112","490586112","False",,,,"98332672","98332672",,,"0","","True","00:00:43","00:02:11.9700000","00:01:28.9700000",,
    "Xorg","12550",,"499658752","84373504","0","0",,"System.Diagnostics.Process (lightdm)",,"44.97",,,,,"Process","Microsoft.Win32.SafeHandles.SafeProcessHandle","12550","0",,"False","2019-03-16 10:29:11 a.m.",,"12550",".","9223372036854775807","0","System.Diagnostics.ProcessModuleCollection","0","0","0","0","0","0","0","0","0","0","0","0","False","Normal","0","0","Xorg","3","12550",,"System.Diagnostics.ProcessThreadCollection",,"499658752","499658752","False",,,,"84373504","84373504",,,"0","","True","00:00:15.0800000","00:00:44.9700000","00:00:29.8900000",,
    

    xml.ps1

    Get-Process | Export-Clixml pi.xml
    

    运行后 xml.ps1 pi.xml 结局是这样的:

                  <S N="BaseAddress">140154072023040</S>
                  <I32 N="ModuleMemorySize">208896</I32>
                  <S N="EntryPointAddress">0</S>
                </Props>
              </Obj>
            </IE>
          </Obj>
        </Props>
      </Obj>
    </Objs>
    

    (是的,我想我可以把 CSV XML ,我更问如何使用这个 直接来自内部的设施 powershell 无需额外步骤。)

    我想我想要一个非流媒体选项,如果这是正确的术语。

    0 回复  |  直到 6 年前
        1
  •  2
  •   FSCKur    6 年前

    编辑 Export-Clixml ,但请参阅下面的编辑,以获取包含以下内容的解决方案: ConvertTo-Xml

    有趣的问题!我相信答案与流媒体无关,而是与性能和连载有关。

    背景:

    • CSV是平面的-它不会序列化结构化数据。因此,它可能会很快完成,尽管保真度较低。

    • XML是结构化的—XML导出将序列化嵌套属性,如果这些属性本身具有嵌套属性,那么您可能会从系统中提取大量信息。

    串行化器的聪明程度是有限的,它很可能通过多个连续调用来实现这一点 对于管道中的每个对象 导出Clixml Get-Process ,可以对其进行优化,以尽量减少进程外调用。)

    我测试过了 pwsh Get-Process | Export-Clixml processes.xml 然后,我序列化到文件中的对象数是在按下Ctrl-C之前等待多长时间的函数。在我那台软弱无力的公司笔记本电脑上,在默认深度下,每个进程的时间顺序是秒。

    在Windows上的Powershell中,一个 ProcessInfo 进程外调用

    对于每个进程,它将通过COM获取加载的DLL,然后它将通过COM获取线程。。。这些都是在Windows上进行的昂贵的调用,而且可能也是不需要的。

    回答:

    导出Clixml

    如果指定深度为1: Get-Process | Export-Clixml -Depth 1 processes.xml 然后我在一两秒钟内得到所有正在运行的进程。但是我没有得到嵌套属性的完整序列化。

    连载是在保真度和性能之间的权衡。

    编辑2019-03-19

    我看到您添加了一条澄清性的注释—您希望使用XML,而不是具体的CLIXML。

    导出Clixml [System.Management.Automation.PSSerializer]::Serialize() 有效的 ,但对Powershell序列化进行了大量优化。如果您要将数据发送给某个一般服务,则更有可能从

    > $Xml = Get-Process a* | ConvertTo-Xml -Depth 4      # name begins with 'a'
    > $Xml
    
    xml                            Objects
    ---                            -------
    version="1.0" encoding="utf-8" Objects
    
    
    > $Xml.Save('C:\dev\processes.xml')
    > Get-Content 'C:\dev\processes.xml' -TotalCount 10
    <?xml version="1.0" encoding="utf-8"?>
    <Objects>
      <Object Type="System.Diagnostics.Process">
        <Property Name="Name" Type="System.String">AgentUI</Property>
        <Property Name="SI" Type="System.Int32">1</Property>
        <Property Name="Handles" Type="System.Int32">347</Property>
        <Property Name="VM" Type="System.Int64">2204067930112</Property>
        <Property Name="WS" Type="System.Int64">36667392</Property>
        <Property Name="PM" Type="System.Int64">50425856</Property>
        <Property Name="NPM" Type="System.Int64">29800</Property>