none
Запуск скрипта PS с ярлыка RRS feed

  • Вопрос

  • Написал скрипт на PS с входными параметрами. Если запускаю его из-под запущеной оболочки PS -- все работает. Создаю ярлык для скрипта, указываю параметры в поле "Объект", параметры не передаются в скрипт. Может кто сталкивался с подобной проблемой?
    Moderator not found. Begin flame war ([Y]/[N])?
    12 августа 2010 г. 5:19

Ответы

  • 01MDM, не стоит сюда втягивать еще и cmd - он лишь усложняет задачу распределения аргументов и создает дополнительную путаницу.

    Обычно синтаксис вызова сценария извне следующий:

    powershell -command d:\temp\test.ps1 -arg1 123 -arg2 test

    Это правда в самой простой ситуации. За счет того что команда и аргументы перед передачей в powershell.exe разбираются стандартным парсером Windows возникают некоторые сложности. Так например не стоит использовать двойные кавычки для значений аргументов - они проглатываются парсером Windows, вместо них лучше воспользоваться одинарными. Двойные могут быть полезны лишь для заключения в кавычки всего текста команды:

    powershell -command d:\temp\test.ps1 -arg1 '123 465' -arg2 test
    powershell -command "d:\temp\test.ps1 -arg1 123 -arg2 test"

    В самом крайнем случае, если вам надо использовать синтаксис который никак не проходит через парсер Windows или той оболочки из которой вы вызываете сценарий, можете воспользоваться параметром -EncodedCommand у powershell.exe, о нём можно прочитать в справке powershell /?


    AKA Xaegr, MCSE: Security, Messaging; MCITP: Server\Enterprise Administrator; Блог: http://xaegr.wordpress.com
    14 августа 2010 г. 6:00
    Модератор

Все ответы

  • покажите содержимое поля "Объект" вашего проблемного ярлыка.


    blog: http://shss.wordpress.com/
    12 августа 2010 г. 8:29
  • Попробуйте создать ярлык на:

    cmd /c powershell -c script.ps1 -args <аргументы>

     

    Как-то пробовал, работало.

    12 августа 2010 г. 9:34
  • 01MDM, не стоит сюда втягивать еще и cmd - он лишь усложняет задачу распределения аргументов и создает дополнительную путаницу.

    Обычно синтаксис вызова сценария извне следующий:

    powershell -command d:\temp\test.ps1 -arg1 123 -arg2 test

    Это правда в самой простой ситуации. За счет того что команда и аргументы перед передачей в powershell.exe разбираются стандартным парсером Windows возникают некоторые сложности. Так например не стоит использовать двойные кавычки для значений аргументов - они проглатываются парсером Windows, вместо них лучше воспользоваться одинарными. Двойные могут быть полезны лишь для заключения в кавычки всего текста команды:

    powershell -command d:\temp\test.ps1 -arg1 '123 465' -arg2 test
    powershell -command "d:\temp\test.ps1 -arg1 123 -arg2 test"

    В самом крайнем случае, если вам надо использовать синтаксис который никак не проходит через парсер Windows или той оболочки из которой вы вызываете сценарий, можете воспользоваться параметром -EncodedCommand у powershell.exe, о нём можно прочитать в справке powershell /?


    AKA Xaegr, MCSE: Security, Messaging; MCITP: Server\Enterprise Administrator; Блог: http://xaegr.wordpress.com
    14 августа 2010 г. 6:00
    Модератор
  • Василий, прошу прощения за путаницу с пометками об ответе. :)

    powershell -command d:\temp\test.ps1 -arg1 123 -arg2 test -- помогло.


    Moderator not found. Begin flame war ([Y]/[N])?
    17 августа 2010 г. 5:21