PowerShell lança erro em pastas com dois espaços em seu nome

2

No Windows 10, acabei de encontrar o seguinte problema: ao usar shift + clique com o botão direito do mouse para iniciar o powershell em alguma pasta, Eu sempre recebo um erro se o nome da pasta contiver dois espaços consecutivos. Se você navegar para

"D:\foo  bar"

dentro do explorer e, em seguida, use o método disse para abrir o PS você recebe um erro e PS inicia na pasta C:\WINDOWS\system32> . Existe uma maneira de corrigir isso?

Eu sei que geralmente não faz sentido ter dois espaços consecutivos em um nome de pasta (alguns podem argumentar que até mesmo um espaço é um em excesso), mas essa não é a questão aqui.

EDIT: Esta é a tradução aproximada (indicada por <translation></translation> ) do erro que recebo (ela é impressa no idioma do meu sistema). Eu não acho que isso ajuda como você poderia facilmente tentar:

Set-Location : <translated> The path "D:\foo bar" cannot be found because it does not exist:.
In Row:1 Character:1</translation>
+ Set-Location -literalPath 'C:\Users\user\Desktop\foo  bar'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (D:\foo bar:String) [Set-Location], ItemNotFoundE
   xception
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.SetLocationCommand
    
por flawr 17.11.2017 / 00:18

1 resposta

1

É um problema que escapou. Consulte aspas duplas nas configurações minhas da subchave de registro HKCR\Directory\shell para executar o PowerShell:

==> reg query "HKCR\Directory\shell\PowerShell" /S

HKEY_CLASSES_ROOT\Directory\shell\PowerShell
    (Default)    REG_SZ    PowerShell here

HKEY_CLASSES_ROOT\Directory\shell\PowerShell\command
    (Default)    REG_SZ    powershell.exe -noexit  -command Set-Location '"%V"'

e para executar o PowerShell como administrador:

==> reg query "HKCR\Directory\shell\runasPowerShell" /S

HKEY_CLASSES_ROOT\Directory\shell\runasPowerShell
    HasLUAShield    REG_SZ
    (Default)    REG_SZ    PowerShell here as administrator

HKEY_CLASSES_ROOT\Directory\shell\runasPowerShell\command
    (Default)    REG_SZ    Powershell Start-Process PowerShell -verb runas -ArgumentList
'-noexit', 'Push-Location -literalPath ''""""%V""""'''

Você pode modificar as configurações acima para o HKLM\SOFTWARE\Classes\Directory\backg‌​round\shell easy.

Explicação : PowerShell.exe analisa sua própria linha de comando pré-tokenizada por meio de um processo Host da janela do console conhost.exe . ( Se for executado a partir do menu de contexto do Windows explorer , ele gera sua própria instância de conhost.exe ).

Portanto, todos os espaços múltiplos consequentes (sem escape por aspas duplas) são considerados separadores de itens redundantes e encolhidos para o único.

É claro que usar aspas simples dentro do PowerShell deve ser suficiente ...

    
por 17.11.2017 / 16:38