从 WMI Invokemethod 获取 powershell 变量值

Get powershell variable values from WMI Invokemethod

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

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

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

提前致谢!

网络上有很多关于从 C# 执行 PS 脚本并检索 PS 脚本创建的任何(管道)输出的信息。这是描述该过程的博客:http://blogs.msdn.com/b/kebab/archive/2014/04/28/executing-powershell-scripts-from-c.aspx . Here is the actual API documented: 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 这是不可能的(请参阅页面底部的社区评论以获得更多深度)。