我正在开发一个使用invokemethod调用powershell的c#服务(由于需要,我使用了这条路由,需要使用.net 2)。所以我的问题是,如果我在这个WMI调用中设置值,我可以将它们拉回原始线程吗?一个例子是(伪代码):
wmi.invokemethod(“powershell.exe -command&(invoke-command {$ a =(get-acl).path; return $ path}));
在上面的例子中,我想获取$ path变量,但没有找到任何方法可以做到这一点。
提前致谢!
乔
答案 0 :(得分:0)
Web上有很多关于从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无法实现(请参阅页面底部的社区评论以获取更深入的信息)。