【问题标题】:take powershell object save as xml and load in c#将powershell对象另存为xml并在c#中加载
【发布时间】:2012-06-20 16:45:45
【问题描述】:

我有以下 powershell 脚本,它扫描一个位置并将文件详细信息添加到一个 xml 文件中,

Get-ChildItem -recurse c:\DATA | Select-Object  * , @{Name="Kbytes";Expression={ "{0:N0}" -f ($_.Length / 1Kb) }},@{Name="Age";Expression={ (((Get-Date) - $_.CreationTime).Days) }}  | Export-Clixml c:\DATA\Final.xml 

据我了解,这应该是 .net 框架中的一个对象,假设是一个数据集? 我想做的是将此对象加载到 c# 应用程序中并将其用作数据集。

如何将对象加载到 c# 中的数据集中?

【问题讨论】:

  • 通过使用 Export-CliXML,您可以对数据进行序列化。所以,当你反序列化它时,它不会是一个活动对象。对象上所有可用的方法都将丢失。

标签: c# xml powershell dataset


【解决方案1】:
  1. 添加对System.Management.Automation.dll 程序集的引用。
  2. 创建一个 PowerShell Runspace
  3. 打开Runspace
  4. 使用Import-CliXml 命令创建一个PowerShell Pipeline 对象
  5. 调用Pipeline
  6. 关闭Runspace

        var rs = RunspaceFactory.CreateRunspace();
        rs.Open();
        var pl = rs.CreatePipeline(@"Import-CliXml c:\DATA\Final.xml;");
        var result = pl.Invoke();
        rs.Close();
    

【讨论】:

    【解决方案2】:

    更快的方法可能是:

    -对于列表

    object[] xmlAsList =
         System.Management.Automation.PSSerializer.DeserializeAsList(System.IO.File.ReadAllText(@"C:\Users\batman\Desktop\myList.clixml"));
    

    -对于通用对象

    object importedObject =
     System.Management.Automation.PSSerializer.Deserialize(System.IO.File.ReadAllText(@"C:\Users\batman\Desktop\myObject.clixml"));
    

    然后,您可以通过:System.Management.Automation.PSObject 使用 Members 属性管理结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-26
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      • 2014-11-20
      相关资源
      最近更新 更多