使用PowerShell版本3.0或4.0的一些人知道您可以指定-Version 2.0
参数来启动PowerShell版本2.0。我很想知道PowerShell v2.0可执行文件的确切位置,所以我决定做一些研究。
powershell.exe
$PSVersionTable.PSVersion;
(Get-Process -Id $pid).Path;
然后对于PowerShell 2.0版,同样的事情:
powershell -version 2.0
$PSVersionTable.PSVersion;
(Get-Process -Id $pid).Path;
结果显示两个PowerShell版本从同一文件路径运行,但这两个进程正在运行不同的CLR版本。
我的问题是:如果相同的 .NET程序集在两个不同的CLR版本中执行,这种情况怎么可能呢?
答案 0 :(得分:2)
事实证明,答案非常简单:PowerShell.exe不是.NET程序集(必须通过ILDasm.exe验证才能证明这一点)。
它只是根据需要将模块/ dll加载到CLR中。 CLRVersion值报告PowerShell在加载程序集时将使用的CLR版本。不幸的是,我无法找到任何详细说明PowerShell用于加载/与.NET代码交互的过程的好资源。