4

This is a very annoying thing, to run any .exe that is inside the current directory in Powershell, I am required to use a .\ ahead.

For example, if I have the program fastboot.exe inside the current folder I can not simply type fastboot, as it does inside cmd. I'm forced to type:

.\fastboot

If I just type fastboot (without .\ I get some error like:

The term 'fastboot' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

+ fastboot + ~~~~~~~~ + CategoryInfo : ObjectNotFound: (fastboot:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException

How to avoid this?

  • Could you be a little more specific? I just checked mine and that's not the case. I'm running PS version 5.1. I typed "cd C:\users\xxx\desktop" and then typed "start xxx.xxx" and it opened without a leading ".\" - Could you provide a snippet of your code? The .\ might be needed for another reason. – Andrew Nov 6 '18 at 1:54
  • to run any command...are you sure this is required for all/any commands? Not just PowerShell scripts? – I say Reinstate Monica Nov 6 '18 at 1:56
  • I corrected the post, it would not be "command", but ".exe". – Rogério Dec Nov 6 '18 at 2:08
  • can you provide the response when you try to use the command like you expect? – manbearpig Nov 6 '18 at 2:18
  • 1
    This is a security feature. In this case, Powershell does the unix/linux thing and does not run commends from the current directory. More here: unix.stackexchange.com/questions/4430/… – uSlackr Nov 12 '18 at 21:53
3

Powershell does not load commands from the current location by default.

Suggestion [3,General]: The command xxx.exe was not found, but does exist in the current location. Windows PowerShell does not load commands from the current location by default. If you trust this command, instead type ".\xxx.exe". See "get-help about_Command_Precedence" for more details.

So you are left with two options

  • Lower the security barrier by adding the current directory to you path

     $env:path ="$($env:path);."
    
  • Get into the habbit of always prefixing the command with .\

  • I've never heard that cmd.exe's behavior was insecure. If that's a true security vulnerability in cmd.exe I'm pretty sure Microsoft would have to updated it... – Carl Walsh Aug 6 '19 at 3:05
  • @CarlWalsh - This is specific to Powershell and the reasoning is the same is in this question. – Lieven Keersmaekers Aug 6 '19 at 5:51
  • 1
    Yes, but if PowerShell thinks it is a security problem to trust the current directory as the PATH, I'm wondering why it's not a security problem for cmd to have that behavior. (Maybe part of this is because PS lets you change directories to network locations or even drives with custom providers? But in cmd you can cd into a network share mapped to a drive, and run untrusted programs there.) Put another way, if you add . to the PATH then PS is just as secure as cmd? – Carl Walsh Aug 6 '19 at 6:13
  • @CarlWalsh - I don't know why cmd behaves differently in that regard but I would assume it is left in for backwards compatibility. Afaik, this is a security problem in cmd. If I can get a domain admin to open a command prompt on my computer, navigate to a folder under my control where I've put a malicious dir executable: I can have it do whatever I want. You should post your question as a new question. – Lieven Keersmaekers Aug 6 '19 at 7:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.