Невозможно запустить скрипт powershell в папке с квадратными скобками

У меня есть скрипт powershell в папке с квадратными скобками, например:

Когда я пытаюсь запустить свой скрипт из командной строки, используя:

C:\Temp\[test]>Powershell.exe .\MyScript.ps1

Я получаю следующий вывод:

Если я помещу тот же сценарий в папку без квадратных скобок и запустите:

C:\Temp\(test)>Powershell.exe .\MyScript.ps1

Это работает, и я получаю следующий вывод:

Сценарий является частью проекта автоматизации и должен находиться в папке с квадратными скобками. Любая помощь будет принята с благодарностью.

1 ответ

Решение

Проблема: передача локального пути к powershell.exe с квадратными скобками в именах папок означает, что powershell не может найти переданный ему файл сценария.

Вариант 1: используйте powershell -File .\MyScript.ps1
Вариант 2: используйте powershell %CD%\MyScript.ps1

Мне не ясно, почему powershell не может найти ваш путь, но аргумент командной строки -File, похоже, исправляет это. Как и при использовании свойства пакетного файла% CD% вместо '.'

Если я создаю файл "HelloWorld.ps1", содержащий одну строку:

Write-Output "Hello World"

в папке

c:\work\joel\scream

и запустите команду:

C:\work\joel\scream>powershell .\HelloWorld.ps1

тогда я получаю ожидаемый результат (Hello World).

Если я переименую папку в [scream], произойдет сбой.

cd ..
ren scream [scream]

Квадратные скобки - это оператор диапазона.

C:\work\joel\[scream]>powershell .\HelloWorld.ps1

теперь дает:

.\helloworld.ps1: термин ".\helloworld.ps1" не распознается как имя командлета, функции, файла сценария или работоспособной программы. Проверьте правильность написания имени или, если путь был указан, проверьте правильность пути и повторите попытку.

Однако работает:

C:\work\joel\[scream]>powershell -File .\HelloWorld.ps1   

дает ожидаемый результат (Hello World).

powershell /?
<snip/>
-File
    Runs the specified script in the local scope ("dot-sourced"), so that the
    functions and variables that the script creates are available in the
    current session. Enter the script file path and any parameters.
    File must be the last parameter in the command, because all characters
    typed after the File parameter name are interpreted
    as the script file path followed by the script parameters.

Я не уверен, что PowerShell или командная строка / пакетный скрипт неправильно интерпретируют путь, но я могу сказать, что пока:

C:\work\joel\[scream]>powershell .\HelloWorld.ps1

не работает:

C:\work\joel\[scream]>powershell %CD%\helloworld.ps1 

работает. так что, похоже, это связано с расширением "." в текущий путь.

Другие вопросы по тегам