【问题标题】:Get powershell variable values from WMI Invokemethod从 WMI Invokemethod 获取 powershell 变量值
【发布时间】:2015-11-13 10:01:33
【问题描述】:

我正在开发一个使用invokemethod 调用powershell 的c# 服务(由于要求,我使用了这条路线并且需要使用.net 2)。所以我的问题是,如果我在这个 WMI 调用中设置值,我可以将它们拉回原始线程吗?例如(伪代码):

wmi.invokemethod("powershell.exe -command &(invoke-command {$a=(get-acl).path;return $path}));

在上面的例子中,我想获取 $path 变量,但没有找到任何可以做到这一点的文章。

提前致谢!

【问题讨论】:

  • 这真的有效吗?调用任意命令作为InvokeMethod()的唯一参数?
  • 完整的语法是(进程类和之前分配的powershell命令(inparams["commandline")):ManagmentBaseObject outparams=processclass.InvokeMethod("Create",inparams,null)。跨度>

标签: c# powershell wmi


【解决方案1】:

网络上有很多关于从 C# 执行 PS 脚本和检索 PS 脚本创建的任何(管道)输出的信息。这是描述该过程的博客:http://blogs.msdn.com/b/kebab/archive/2014/04/28/executing-powershell-scripts-from-c.aspx。这是记录的实际 API:https://msdn.microsoft.com/en-us/library/dd182449(v=vs.85).aspx。请注意,该页面也有一个示例。

如果您要执行用户脚本并需要检索它设置的变量(相对于您自己编写的脚本),那么您可以编写一个包装脚本,该脚本点源用户脚本,然后在用户脚本之后完成您的包装脚本将 $path(或您喜欢的任何其他变量)输出到管道,您的 C# 代码将能够在其中检索它。

顺便说一句,我认为没有任何简单的方法可以像您通过 WMI Invoke 描述的那样做。上述方法适用于.Net 2.0。

您可能会想到要做的一件事是,让 wmi.invoke 创建的进程更改它的父级(您的 C# 服务)环境。但是,正如这里所解释的:https://msdn.microsoft.com/en-us/library/windows/desktop/ms682009(v=vs.85).aspx 这是不可能的(请参阅页面底部的社区 cmets 了解更多深度)。

【讨论】:

  • 感谢您的信息!我会检查你提到的文章。
猜你喜欢
  • 2015-05-17
  • 1970-01-01
  • 2010-12-15
  • 1970-01-01
  • 2018-12-20
  • 1970-01-01
  • 2011-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多