Equivalent of *Nix 'which' command in PowerShell?

后端 未结 14 2193
刺人心
刺人心 2020-11-28 00:16

How do I ask PowerShell where something is?

For instance, \"which notepad\" and it returns the directory where the notepad.exe is run from according to the current

相关标签:
14条回答
  • 2020-11-28 00:44

    This seems to do what you want (I found it on 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
    
    0 讨论(0)
  • 2020-11-28 00:45

    Try this example:

    (Get-Command notepad.exe).Path
    
    0 讨论(0)
  • 2020-11-28 00:46

    The very first alias I made once I started customizing my profile in PowerShell was 'which'.

    New-Alias which get-command
    

    To add this to your profile, type this:

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

    The `n at the start of the last line is to ensure it will start as a new line.

    0 讨论(0)
  • 2020-11-28 00:47

    I have this which advanced function in my PowerShell profile:

    function which {
    <#
    .SYNOPSIS
    Identifies the source of a PowerShell command.
    .DESCRIPTION
    Identifies the source of a PowerShell command. External commands (Applications) are identified by the path to the executable
    (which must be in the system PATH); cmdlets and functions are identified as such and the name of the module they are defined in
    provided; aliases are expanded and the source of the alias definition is returned.
    .INPUTS
    No inputs; you cannot pipe data to this function.
    .OUTPUTS
    .PARAMETER Name
    The name of the command to be identified.
    .EXAMPLE
    PS C:\Users\Smith\Documents> which Get-Command
    
    Get-Command: Cmdlet in module Microsoft.PowerShell.Core
    
    (Identifies type and source of command)
    .EXAMPLE
    PS C:\Users\Smith\Documents> which notepad
    
    C:\WINDOWS\SYSTEM32\notepad.exe
    
    (Indicates the full path of the executable)
    #>
        param(
        [String]$name
        )
    
        $cmd = Get-Command $name
        $redirect = $null
        switch ($cmd.CommandType) {
            "Alias"          { "{0}: Alias for ({1})" -f $cmd.Name, (. { which cmd.Definition } ) }
            "Application"    { $cmd.Source }
            "Cmdlet"         { "{0}: {1} {2}" -f $cmd.Name, $cmd.CommandType, (. { if ($cmd.Source.Length) { "in module {0}" -f $cmd.Source} else { "from unspecified source" } } ) }
            "Function"       { "{0}: {1} {2}" -f $cmd.Name, $cmd.CommandType, (. { if ($cmd.Source.Length) { "in module {0}" -f $cmd.Source} else { "from unspecified source" } } ) }
            "Workflow"       { "{0}: {1} {2}" -f $cmd.Name, $cmd.CommandType, (. { if ($cmd.Source.Length) { "in module {0}" -f $cmd.Source} else { "from unspecified source" } } ) }
            "ExternalScript" { $cmd.Source }
            default          { $cmd }
        }
    }
    
    0 讨论(0)
  • 2020-11-28 00:49

    Check this PowerShell Which.

    The code provided there suggests this:

    ($Env:Path).Split(";") | Get-ChildItem -filter notepad.exe
    
    0 讨论(0)
  • 2020-11-28 00:49

    I like Get-Command | Format-List, or shorter, using aliases for the two and only for powershell.exe:

    gcm powershell | fl
    

    You can find aliases like this:

    alias -definition Format-List
    

    Tab completion works with gcm.

    0 讨论(0)
提交回复
热议问题