Powershell.exe (v 2.0) 的路径

Posted

技术标签:

【中文标题】Powershell.exe (v 2.0) 的路径【英文标题】:Path to Powershell.exe (v 2.0) 【发布时间】:2011-05-07 21:51:31 【问题描述】:

Powershell(2.0 版)位于何处? Powershell.exe 的路径是什么?我安装了 Windows Server 2008 和 Powershell。当我查看这个文件夹时:

PS C:\Windows\System32\WindowsPowerShell> dir


    Directory: C:\Windows\System32\WindowsPowerShell


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         20.4.2010     17:09            v1.0

我只有 Powershell v1.0。但是当我输入

PS C:\> $Host.version

Major  Minor  Build  Revision
-----  -----  -----  --------
2      0      -1     -1


PS C:\>

显示我安装了v2.0。

【问题讨论】:

你在上面看到的“v1.0”只是一个目录名,并不是一个实际的版本号。 看看PowerShell链接的目标位置 【参考方案1】:

我相信它在C:\Windows\System32\WindowsPowershell\v1.0\。为了迷惑无辜,MS 将其保存在标有“v1.0”的目录中。在 Windows 7 上运行它并通过 $Host.Version (Determine installed PowerShell version) 检查版本号显示它是 2.0。

另一个选项是在命令提示符下键入$PSVersionTable。如果您运行的是 v2.0,则输出将是:

Name                           Value
----                           -----
CLRVersion                     2.0.50727.4927
BuildVersion                   6.1.7600.16385
PSVersion                      2.0
WSManStackVersion              2.0
PSCompatibleVersions           1.0, 2.0
SerializationVersion           1.1.0.1
PSRemotingProtocolVersion      2.1

如果您运行的是 1.0 版,则该变量不存在并且不会有输出。

本地化 PowerShell 版本 1.0、2.0、3.0、4.0:

64位版本:C:\Windows\System32\WindowsPowerShell\v1.0\ 32位版本:C:\Windows\SysWOW64\WindowsPowerShell\v1.0\

【讨论】:

也许这是他们想要保持兼容性的硬编码路径的情况? 微软就是微软 “为了迷惑无辜”将成为我最喜欢的名言之一。【参考方案2】:

我认为 $PsHome 有你想要的信息?

PS .> $PsHome C:\Windows\System32\WindowsPowerShell\v1.0 PS .> 获取帮助 about_automatic_variables 话题 about_Automatic_Variables ...

【讨论】:

【参考方案3】:

这是一种方法...

(Get-Process powershell | select -First 1).Path

这可能是一种更好的方法,因为它返回路径上的第一个命中,就像您从命令提示符运行 Powershell...

(Get-Command powershell.exe).Definition

【讨论】:

就我而言,这是一个比目前投票高达 35 更好的答案。最初的问题似乎是关于可执行文件的路径,版本信息是附带的题。这个答案直接解决了这个问题,甚至绕过了“应该是”的答案,让人们准确地找出 exe 在他们自己系统上的位置,即使该系统与默认系统不同。 (这就是我来这里寻找的东西,所以我很感激。) 基于powershell.exe 的可执行文件进行搜索有点过于轻松,因为您可以轻松地将另一个可执行文件重命名为powershell.exe,并让它代替该进程。 Get-Process -Id $PID 会起作用,但我不确定 $PID 引入了哪个版本。 我看到您的“过于放松”的观点,但是,使用 $PID 将返回当前主机,它可能不是 Powershell 解释器。比如 Powershell_ise.exe。 可能自 2011 年 11 月以来属性发生了变化。对我来说(2016 年 7 月,使用 Windows Server 2012)属性 .Source 不存在,相反,我可以使用属性 .Definition 返回:“C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe” .我的 $PSHome 变量包含:“C:\Windows\System32\WindowsPowerShell\v1.0” 此外,如果您使用 get-process,请考虑使用 'powershell*' 而不是仅使用 powershell,以防您使用 powershell_ise。 HTH 将答案从使用 .Source 更改为 .Definition。【参考方案4】:

总是 C:\Windows\System32\WindowsPowershell\v1.0。为了向后兼容,我在某处听到或读到了这样的内容。

【讨论】:

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe。如果 SystemRoot 不是“C:\Windows” 这不适用于 64 位 Windows 上的 32 位 PowerShell。在这种情况下,它位于 C:\Windows\SysWOW64\WindowsPowerShell\v1.0。【参考方案5】:

要获取当前运行的 PowerShell 的完整路径,您可以使用以下命令:

[System.Diagnostics.Process]::GetCurrentProcess().MainModule.FileName

生成的路径包括 PowerShell 可执行文件名,它允许您区分 PowerShell 和 PowerShell ISE(与 $PsHome 不同,它只显示 PowerShell 文件夹)。此外,与 Get-Process 不同,它不受 系统上运行的其他进程,因此您始终可以获得当前架构(32 位或 64 位)的正确路径。

GetCurrentProcess method 可用于 .NET Framework 1.1 和 .NET Core 1.0,因此它适用于任何版本的 .NET/PowerShell。

【讨论】:

以上是关于Powershell.exe (v 2.0) 的路径的主要内容,如果未能解决你的问题,请参考以下文章

powershell.exe 命令行变量

以编程方式获取 powershell.exe 的完整路径

为啥删除 powershell.exe -executionpolicy unrestricted 突然起作用但以前没有

尝试下载 EXE 文件后,PowerShell (x64) 停止工作 (Windows 7)

cmd.exe --> powershell.exe "-File" 和 "-Command" 在同一行

从 powershell.exe 将参数传递给脚本