【问题标题】:Retrieving GetExecutingRequests from PowerShell into c# object从 PowerShell 检索 GetExecutingRequests 到 c# 对象
【发布时间】:2019-05-09 01:09:38
【问题描述】:

我正在尝试将数据从 PowerShell 检索到 c# 对象中。我要查找的数据是从远程 Web 服务器上的 GetExecutingRequests 的 PowerShell Invoke() 返回的。我遇到的问题是我没有收到错误代码,但我正在寻找的 Invoke() 的结果在返回数据或 PowerShell 对象中不存在。

using (Runspace runspace = RunspaceFactory.CreateRunspace(cxn))
            {
                runspace.Open();
                using (PowerShell ps = PowerShell.Create())
                {
                    ps.Runspace = runspace;

                    string script = String.Format("Get-WmiObject 
    WorkerProcess -Namespace root\\WebAdministration -ComputerName {0} | 
    Invoke-WmiMethod -Name GetExecutingRequests", server);

                    ps.AddScript(script);
                    ps.AddParameter("OutputElement", new HttpRequest[0]);

                    var result = ps.Invoke();
                }
            }  

此代码执行,并返回一个包含 29 个项目的集合。但是,它们都没有显示 GetExecutingRequests 结果,并且在 PowerShell 对象上也没有任何相关内容。

我想将 GetExecutingRequests 的输出转换为 c# 对象,以便进行进一步处理。 ps 对象上的 PSDataStreams 也没有结果。

任何帮助将不胜感激。

更多信息:

我能够通过更改我发送的 PowerShell 脚本来解决这个问题:

string script = String.Format("Get-WmiObject WorkerProcess -Namespace root\\WebAdministration -ComputerName {0} | Invoke-WmiMethod -Name GetExecutingRequests | %{{ $_ | Select-Object -ExpandProperty OutputElement }}", server);

【问题讨论】:

    标签: c# powershell


    【解决方案1】:

    我不太确定是否可以直接解析结果,但我建议在命令下方运行以获取有关返回对象的更多信息。从那里,您可以研究如何处理 C# 中的返回。

    Get-WmiObject -Class $(<scriptblock>) | get-member
    
    1. 在 C# 中定义对象类型,然后看看您是否能够先以这种方式捕获它。

    如果您无法在自己捕获在 powershell 中返回的对象类型方面取得任何进展,那么可能值得在此处发布以查看是否有其他人能够提供有关连接这些对象的解决方法的任何见解/经验输入 C#。

    1. 如果上面确实不可能,强制 powershell 从标准输出返回所有内容将有助于确定它是否编写了任何有意义的东西,您可以在 C# 中抓取/格式化。我认为在引用的 powershell 命令中执行此操作的最佳方法是:

      return $(Get-WmiObject WorkerProcess -Namespace root\WebAdministration -ComputerName {0} | Invoke-WmiMethod -Name GetExecutingRequests | *>&1)

    这会将所有 5+ 个标准输出从 powershell 返回到返回对象(对于那些阅读,请参阅these docs on ps streams)。您绝对应该能够在结果变量中捕获返回值,但确保您能够从溢出中抛出/捕获错误也无妨。

    希望这有助于继续挖掘!

    【讨论】:

    • 感谢您的回答。我能够解决它,但它与您的建议相似。 +1
    猜你喜欢
    • 1970-01-01
    • 2021-11-02
    • 2021-08-11
    • 1970-01-01
    • 2013-05-10
    • 2015-01-19
    • 2012-05-05
    • 2016-10-16
    • 2011-10-10
    相关资源
    最近更新 更多