在 PowerShell 中,如何解析可执行文件的位置?

Dec*_*ech 5 powershell executable file path

在很多情况下,我需要可执行文件或命令行工具的路径,例如:notepadkubectl. 使用 PowerShell 时,可执行文件可用,但文件的物理位置并不总是很容易找到。

一种方法是搜索 PATH 上的每个文件夹,甚至更糟糕的是系统(gci -r | % { $_ ...}),但这不是最有效地利用时间,每次都重新编码。有没有更好的办法?

Jef*_*lin 11

Get-Command将返回一个包含多个带有路径名的字段的对象。例如,如果我Get-Command notepad在系统上输入,我会得到

\n
PS Z:\\> Get-Command notepad\n\nCommandType     Name                                               Version    Source\n-----------     ----                                               -------    ------\nApplication     notepad.exe                                        10.0.18... C:\\WINDOWS\\system32\\notepad.exe\n\n
Run Code Online (Sandbox Code Playgroud)\n

如果我输入Get-Command notepad | Select-Object *我会得到

\n
PS Z:\\> Get-Command notepad | Select-Object *                               \n                                                                            \n                                                                            \nHelpUri            :                                                        \nFileVersionInfo    : File:             C:\\WINDOWS\\system32\\notepad.exe      \n                     InternalName:     Notepad                              \n                     OriginalFilename: NOTEPAD.EXE.MUI                      \n                     FileVersion:      10.0.18362.1 (WinBuild.160101.0800)  \n                     FileDescription:  Notepad                              \n                     Product:          Microsoft\xc2\xae Windows\xc2\xae Operating System \n                     ProductVersion:   10.0.18362.1                         \n                     Debug:            False                                \n                     Patched:          False                                \n                     PreRelease:       False                                \n                     PrivateBuild:     False                                \n                     SpecialBuild:     False                                \n                     Language:         English (United States)              \n                                                                            \nPath               : C:\\WINDOWS\\system32\\notepad.exe                        \nExtension          : .exe                                                   \nDefinition         : C:\\WINDOWS\\system32\\notepad.exe                        \nSource             : C:\\WINDOWS\\system32\\notepad.exe                        \nVersion            : 10.0.18362.1316                                        \nVisibility         : Public                                                 \nOutputType         : {System.String}                                        \nName               : notepad.exe                                            \nCommandType        : Application                                            \nModuleName         :                                                        \nModule             :                                                        \nRemotingCapability : PowerShell                                             \nParameters         :                                                        \nParameterSets      :                                                        \n                                                                            \n
Run Code Online (Sandbox Code Playgroud)\n


Dec*_*ech 3

我最近发现Where.exePowerShell 可用。

> Where.exe kubectl
C:\Program Files\Docker\Docker\resources\bin\kubectl.exe
Run Code Online (Sandbox Code Playgroud)

这与 PowerShell 变量兼容,因此可以在编写脚本时使用: $path = where.exe notepad