61

When I run where in CMD, I get output:

C:\Users\Ragesh> where calc
C:\Windows\System32\calc.exe

But the same thing in PS:

PS C:\data\code> where calc
PS C:\data\code>

Where's the output going?!

2 Answers 2

104

The following worked for me:

PS C:\Users\Bill> where.exe calc
C:\Windows\System32\calc.exe

When you type where in PS, it is not same as executing where.exe

PS C:\Users\Bill> where  <press ENTER>

cmdlet Where-Object at command pipeline position 1
Supply values for the following parameters:
Property:

So when you type where calc it is executing Where-Object calc (the alias of Where-Object is where and ?) and thus returns nothing, and not executing where.exe calc.

You can use the Get-Command (alias gcm) cmdlet instead of where.exe. Here is an example function to make Get-Command function exactly like where.exe. If you put this in your PowerShell profile it will always be available in your session.

function which ($command) {
    Get-Command -Name $command -ErrorAction SilentlyContinue | 
        Select-Object -ExpandProperty Path -ErrorAction SilentlyContinue
}

The following links may be useful -

Equivalent of *Nix 'which' command in Powershell?

https://superuser.com/questions/34492/powershell-equivalent-to-unix-which-command

Hope this helps.

Sign up to request clarification or add additional context in comments.

6 Comments

Thanks for the tip. It doesn't explain why 'where' doesn't show any output in PS, though.
@Ragesh I updated the answer with explanation and a way to get this to work. Pls let me know if u have questions.
You can also run it in using cmd.exe. Like cmd /c "where calc"
You can see the command precedence that leads to this by issuing get-command where -CommandType all.
is there any way of switching off this behaviour? I found the same problem with 'sc' (for mucking around with services) and then tried to 'where' sc. Thought my computer had gone crazy! I dont want to use cmd because of the obvious horribleness but powershell randomly replacing stuff with other stuff is also awful
|
2

@Bill's answer is one reason.

Another is you're in the Powershell ISE in which case where.exe invokes a new command shell that opens, prints the output, and closes immediately.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.