"信息"属性在Powershell实例的Streams属性上不可用的编译时间

时间:2015-12-20 10:47:11

标签: c# .net powershell

所以..非常奇怪的问题。

使用VS2015和.net 4.52

我开发了这个C#powershell代码,它正在运行一个脚本并捕获输出。像这样:

        using (PowerShell powerShellInstance = PowerShell.Create())
        {
            powerShellInstance.AddScript(scriptContents);

            Collection<PSObject> PSOutput = powerShellInstance.Invoke(); 

            if (powerShellInstance.Streams.Information.Count > 0)
            {

                    foreach (var item in powerShellInstance.Streams.Information)
                    {
                        //do something with info
                    }


                }

            }
        }

编译并运行(在Windows 10专业版机器上),没问题。

直到我得到一台新机器(Surface pro 4,所以也是windows 10 pro)并尝试编译代码,我收到此错误:

  

&#39; PSDataStreams&#39;不包含&#39;信息&#39;的定义没有扩展方法&#39;信息&#39;接受类型&#39; PSDataStreams&#39;的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)

这都是基于TFS的,所以我确定它是相同的代码。

如果我在两台机器上进行定义,问题就变得很明显了:

enter image description here

所以,我注释掉了没有编译代码并运行它,看看运行时发生了什么:

enter image description here

所以财产就在那里..有人对此有一个很好的解释吗?

BTW:msdn文档未提及信息属性..

1 个答案:

答案 0 :(得分:9)

您可能在Surface Pro上引用了错误版本的System.Management.Automation.dll程序集。

在我的Windows 10 Pro安装(从Windows 8.1升级)上,我有两个版本one in each GAC

2 ps versions

图片中选择的那个是“旧的”,位于旧的GAC(C:\windows\assembly)中,并使用文件版本6.1.7600.16385进行标识。

另一个(包含正确版本的PSDataStreams并公开Information流)存在于C:\Windows\Microsoft.NET\assembly中,并且在撰写时具有文件版本10.0.10240.16384。