Call a specific version of PowerShell from C#

£可爱£侵袭症+ 提交于 2019-12-02 07:49:54

A colleague figured it out:

Apparently, .NET 4+ comes with an all new common language runtime: the CLR4
This runtime uses its own assemblies loaded from a new assembly cache located at C:\Windows\Microsoft.NET\assembly.

The System.Management.Automation version 3.0.0.0, which will automatically use PowerShell 3.0, exists for the CLR4 only. Because I configured my application to run under .NET 3.5, it would use the old CLR2 and could not even see the newer assembly.

To make sure the application would still run on .NET 3.5, add this to the App.config file in the project folder:

<supportedRuntime version="v4.0"/> 
<supportedRuntime version="v2.0.50727"/>


If CLR4 is available, it'll load the according GAC, find a policy file that redirects all references to System.Management.Automation version 1.0.0.0 to version 3.0.0.0 and the PowerShell-Modules work as expected.
If you only have .NET 3.5, the older version will be loaded; PowerShell still works, but only up to version 2.0.

Have you looked at this yet?

http://code.msdn.microsoft.com/windowsdesktop/Windows-PowerShell-30-SDK-9a34641d

You might just need the new SDK to call Powershell 3 even if PSv3 is installed on your system already, but I'm usually just a straight Powershell guy.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!