2013-08-09 3 views
1

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

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

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

я получаю следующий результат:

enter image description here

Если я ставлю тот же сценарий в аф старше без квадратных скобок и бега:

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

Он работает и я получаю следующий результат:

enter image description here

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

ответ

1

Проблема: Передача локального пути к 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 

работает. поэтому он, по-видимому, связан с расширением '.' в текущий путь.

+0

Он не использует квадратные скобки в своей команде - похоже, ничего не избежать. Это * текущий путь *, который содержит квадратные скобки. –

+0

Ok @zespri, я оплачу это, это не связано с использованием powershell квадратных скобок для диапазонов. –

+0

@zespri Понял, что скобки находятся на пути. Однако . расширяется до текущего рабочего каталога, следовательно, косвенные скобки в команде. Правильный ответ находится в середине его ответа - используйте 'powershell.exe -File. \ MyScript.ps1'. Я не уверен, однако, почему 'powershell -Command '. \ MyScript.ps1" 'не работает, когда'. \ MyScript.ps1' работает, если набирается в приглашении в каталоге с скобками. Я заметил, что расширение вкладки также не работает в каталогах с помощью скобок. –

Смежные вопросы