запустить скрипт powershell из cmd

Тема в разделе "Пакетные файлы CMD, BAT", создана пользователем Kиpилл, 4 окт 2014.

  1. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.208
    Симпатии:
    4.977
    Вот собственно и вопрос.
    Как из батника или командной строки запустить команду powershell с возвратом данных.
    Это можно?
     
  2. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.478
    Симпатии:
    4.306
    Да. Конечно.
    Вот пример с обходом ограничения на исполнение неподписанных скриптов,
    с передачей скрипту PS двух параметров
    и возвратом результата обратно в виде распечатки в окне CMD:

    Код (DOS):

    @echo off
    SetLocal EnableExtensions

    For /F "UseBackQ delims=" %%a in (`
      %SystemRoot%\System32\WindowsPowerShell\v1.0\PowerShell.exe -ExecutionPolicy ByPass -command ". 'c:\temp\Script1.ps1' 'param1' 'param2'"
    `) do (
      echo %%a
    )
    pause
     
     
    Kиpилл нравится это.
  3. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.208
    Симпатии:
    4.977
    Я правильно понимаю что основа здесь?
    Код (DOS):
    %SystemRoot%\System32\WindowsPowerShell\v1.0\PowerShell.exe -ExecutionPolicy ByPass -command ". 'пишем сюда свой код'"
     
  4. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.478
    Симпатии:
    4.306
    Вот так:

    Код (Text):
    %SystemRoot%\System32\WindowsPowerShell\v1.0\PowerShell.exe -ExecutionPolicy ByPass -command "пишем сюда свой код"
    Расположение процессора Powershell лучше определять специальным скриптом (т.к. в разных ОС может быть по-разному):

    Код (Text):

    set "ps=" & for %%X in (powerShell.exe) do set "ps=%%~$PATH:X"
    if not defined ps set "ps=%systemRoot%\system32\windowsPowerShell\v1.0\powerShell.exe"
     
    Еще желательно дописывать ключ -noprofile
    Это если делать очень грубое сравнение - тоже, что у CMD /D
    (т.е. отключение скриптов, настроенных на автозапуск сразу же после запуска оболочки PS). Подробнее в этой статье.
    --- Объединённое сообщение, 4 окт 2014, Дата первоначального сообщения: 4 окт 2014 ---
    Итого:
    Если бы я учитывал все моменты, например, что в пути к PS могут быть пути и скобки,
    основываясь на опыте, я бы написал так:
    Код (Text):

    @echo off
    SetLocal EnableExtensions

    set "ps=" & for %%X in (powerShell.exe) do set "ps=%%~$PATH:X"
    if not defined ps set "ps=%systemRoot%\system32\windowsPowerShell\v1.0\powerShell.exe"

    For /F "UseBackQ delims=" %%a in (`"cmd /c "
      "%ps%" -ExecutionPolicy ByPass -NoProfile -command "echo 123"
    ""`) do (
      echo %%a
    )
    pause
    echo 123 - это команда для PS.
     
    Последнее редактирование: 4 окт 2014
    Kиpилл и Phoenix нравится это.

Поделиться этой страницей