我如何问PowerShell的东西在哪里?

例如,"which notepad",它根据当前路径返回notepad.exe运行的目录。


当前回答

看看这个PowerShell哪个。

这里提供的代码表明:

($Env:Path).Split(";") | Get-ChildItem -filter notepad.exe

其他回答

这似乎是你想要的(我在http://huddledmasses.org/powershell-find-path/):上找到了它

Function Find-Path($Path, [switch]$All = $false, [Microsoft.PowerShell.Commands.TestPathType]$type = "Any")
## You could comment out the function stuff and use it as a script instead, with this line:
#param($Path, [switch]$All = $false, [Microsoft.PowerShell.Commands.TestPathType]$type = "Any")
   if($(Test-Path $Path -Type $type)) {
      return $path
   } else {
      [string[]]$paths = @($pwd);
      $paths += "$pwd;$env:path".split(";")

      $paths = Join-Path $paths $(Split-Path $Path -leaf) | ? { Test-Path $_ -Type $type }
      if($paths.Length -gt 0) {
         if($All) {
            return $paths;
         } else {
            return $paths[0]
         }
      }
   }
   throw "Couldn't find a matching path of type $type"
}
Set-Alias find Find-Path

这是一个实际的*nix等效,即它给出*nix风格的输出。

Get-Command <your command> | Select-Object -ExpandProperty Definition

用你想要的替换就行了。

PS C:\> Get-Command notepad.exe | Select-Object -ExpandProperty Definition
C:\Windows\system32\notepad.exe

当你把它添加到你的配置文件时,你会想要使用一个函数而不是一个别名,因为你不能对管道使用别名:

function which($name)
{
    Get-Command $name | Select-Object -ExpandProperty Definition
}

现在,当你重新加载你的个人资料,你可以这样做:

PS C:\> which notepad
C:\Windows\system32\notepad.exe

看看这个PowerShell哪个。

这里提供的代码表明:

($Env:Path).Split(";") | Get-ChildItem -filter notepad.exe

当我开始在PowerShell中定制我的个人资料时,我做的第一个别名是“which”。

New-Alias which get-command

要将此添加到您的配置文件中,请键入以下内容:

"`nNew-Alias which get-command" | add-content $profile

最后一行开头的' n是为了确保它将作为一个新行开始。

我喜欢Get-Command |格式列表,或更短,使用别名的两个,只用于powershell.exe:

gcm powershell | fl

你可以找到这样的别名:

alias -definition Format-List

制表符补全使用gcm。

一次列出所有选项:

set-psreadlineoption -editmode emacs