1

我试图让 [poshrunner.exe] 能够在安装了 PowerShell 3.0 版的机器上的 PowerShell 2.0 版环境中运行脚本。PowerShell.exe 支持这一点,尽管对 PowerShell 1.0 的独特支持似乎是可疑的

我正在运行 Windows 8。我的 GAC 中有两个版本的 System.Management.Automation.dll:

  • System.Management.Automation,版本=3.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35(由 加载powershell.exe -version 3.0
  • System.Management.Automation,Version=1.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35(由powershell.exe -version 1.0and加载powershell.exe -version 2.0

据我所知,我没有System.Management.Automation.dll 的发布者策略程序集

C:\Windows\assembly\GAC_MSIL>dir C:\Windows\assembly\GAC_MSIL\policy*
 Volume in drive C has no label.
 Volume Serial Number is 0207-A8AA

 Directory of C:\Windows\assembly\GAC_MSIL

11/16/2012  11:49 PM    <DIR>          Policy.12.0.Microsoft.Office.Interop.Access.Dao
12/13/2012  11:49 PM    <DIR>          policy.2.1.Microsoft.Web.PlatformInstaller
12/13/2012  11:49 PM    <DIR>          policy.3.0.Microsoft.Web.PlatformInstaller
10/29/2012  03:33 PM    <DIR>          policy.3.5.System.Data.SqlServerCe
10/29/2012  03:33 PM    <DIR>          policy.3.5.System.Data.SqlServerCe.Entity
               0 File(s)              0 bytes
               5 Dir(s)  51,204,710,400 bytes free

C:\Windows\assembly\GAC_MSIL>

但是,这样做AppDomain.CurrentDomain.Load("System.Management.Automation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");是加载程序集的版本 3。Assembly.Load()具有相同的结果。

在调用程序集之前:

[ 在逐步通过之前]

调用程序集后:

[ 步入后]

该代码恰好在辅助应用程序域中运行,因此我愿意并且能够对 AppDomain 设置进行很多操作。如何强制 System.Management.Automation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 在运行时有条件地加载。

4

2 回答 2

1

随着时间的推移,我在 System.Management.Automation 方面遇到了各种各样的问题。我最近再次点击它,并决定找到一种替代方法,使用批处理文件从 .NET 运行 PowerShell。有关代码示例,请参阅此博客文章: http ://www.nootn.com.au/2013/01/run-powershell-from-net-program-without.html

这还提到了如何强制它运行特定版本的 PowerShell,因此如果此解决方案适合您,它可能是您问题的答案(假设您乐于尝试避免使用 System.Management.Automation)。

我希望这有助于解决您的问题或解决它!

于 2013-01-14T15:23:17.840 回答
0

如果您访问项目中的参考资料,请找到参考资料并告诉它复制到本地,这也应该有所帮助。

于 2013-06-06T22:56:11.970 回答