Evitar barra invertida de pontos do Windows 10 PowerShell

3

Isso é uma coisa muito irritante, para executar qualquer um .exeque esteja dentro do diretório atual no Powershell, sou obrigado a usar um .\adiante.

Por exemplo, se eu tenho o programa fastboot.exedentro da pasta atual, não posso simplesmente digitar fastboot, como dentro cmd. Sou forçado a digitar:

.\fastboot

Se eu apenas digitar fastboot(sem .\eu receber algum erro como:

O termo 'inicialização rápida' não é reconhecido como o nome de um cmdlet, função, arquivo de script ou programa operável. Verifique a ortografia do nome ou, se um caminho foi incluído, verifique se o caminho está correto e tente novamente.

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

Como evitar isso?

Rogério Dec
fonte
você poderia ser um pouco mais especifico? Acabei de verificar o meu e não é esse o caso. Estou executando o PS versão 5.1. Digitei "cd C: \ users \ xxx \ desktop" e digitei "start xxx.xxx" e ele foi aberto sem um ". \" Inicial - Você poderia fornecer um trecho do seu código? O. \ Pode ser necessário por outro motivo.
Andrew Andrew
para executar qualquer comando ... você tem certeza de que isso é necessário para todos / quaisquer comandos? Não apenas scripts do PowerShell?
Twisty Imitador de
Corrigi a postagem, não seria "comando", mas ".exe".
Rogério Dez
você pode fornecer a resposta ao tentar usar o comando como esperado?
manbearpig
11
Este é um recurso de segurança. Nesse caso, o Powershell faz a coisa unix / linux e não executa recomendações do diretório atual. Mais aqui: unix.stackexchange.com/questions/4430/…
uSlackr

Respostas:

3

O PowerShell não carrega comandos do local atual por padrão.

Sugestão [3, Geral]: O comando xxx.exe não foi encontrado, mas existe no local atual. O Windows PowerShell não carrega comandos do local atual por padrão. Se você confiar neste comando, digite ". \ Xxx.exe". Consulte "get-help about_Command_Precedence" para obter mais detalhes.

Então você tem duas opções

  • Reduza a barreira de segurança adicionando o diretório atual ao seu caminho

     $env:path ="$($env:path);."
    
  • Entre no hábito de sempre prefixar o comando com .\

Lieven Keersmaekers
fonte
Eu nunca ouvi dizer que esse cmd.execomportamento era inseguro. Se essa é uma verdadeira vulnerabilidade de segurança, cmd.exetenho certeza que a Microsoft precisaria atualizá-la ...
Carl Walsh
@CarlWalsh - Isso é específico do Powershell e o raciocínio é o mesmo nesta questão.
Lieven Keersmaekers
11
Sim, mas se o PowerShell acha que é um problema de segurança confiar no diretório atual como PATH, estou me perguntando por que não é um problema de segurança para o cmd ter esse comportamento. (Talvez parte disso seja porque o PS permite alterar diretórios para locais de rede ou até unidades com provedores personalizados? Mas, no cmd, você pode usar um CD em um compartilhamento de rede mapeado para uma unidade e executar programas não confiáveis ​​lá.) Dito de outra maneira, se você adicionar .ao PATH então PS é tão seguro quanto cmd?
Carl Walsh
@CarlWalsh - Eu não sei por que cmdse comporta de maneira diferente a esse respeito, mas eu diria que é deixado para compatibilidade com versões anteriores. Afaik, este é um problema de segurança no Windows cmd. Se eu conseguir que um administrador de domínio abra um prompt de comando no meu computador, navegue até uma pasta sob meu controle onde coloquei um direxecutável malicioso : posso fazer com que ele faça o que eu quiser. Você deve postar sua pergunta como uma nova pergunta.
Lieven Keersmaekers