Проблема: Передача локального пути к powershell.exe, который включает квадратные скобки в именах папок, означает, что powershell не может найти файл сценария, переданный ему.
Вариант 1: использование PowerShell -File \ MyScript.ps1
Вариант 2:. использование PowerShell% CD% \ MyScript.ps1
Я не ясно, почему не может PowerShell найти свой путь, но аргумент командной строки -File, похоже, исправить. Как и использование свойства% CD% batch file вместо '.'
Если я создаю файл "HelloWorld.ps1", содержащий одну строку:
Write-Output "Hello World"
в папке
c:\work\joel\scream
и запустить команду:
C:\work\joel\scream>powershell .\HelloWorld.ps1
я получить ожидаемый результат (Hello World).
Если я переименую папку в [крик], она терпит неудачу.
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
работает. поэтому он, по-видимому, связан с расширением '.' в текущий путь.
Он не использует квадратные скобки в своей команде - похоже, ничего не избежать. Это * текущий путь *, который содержит квадратные скобки. –
Ok @zespri, я оплачу это, это не связано с использованием powershell квадратных скобок для диапазонов. –
@zespri Понял, что скобки находятся на пути. Однако . расширяется до текущего рабочего каталога, следовательно, косвенные скобки в команде. Правильный ответ находится в середине его ответа - используйте 'powershell.exe -File. \ MyScript.ps1'. Я не уверен, однако, почему 'powershell -Command '. \ MyScript.ps1" 'не работает, когда'. \ MyScript.ps1' работает, если набирается в приглашении в каталоге с скобками. Я заметил, что расширение вкладки также не работает в каталогах с помощью скобок. –