[CMD] Запустить скрипт powershell из cmd

Кирилл

Команда форума
Администратор
Сообщения
14,216
Реакции
6,246
Баллы
1,093
Вот собственно и вопрос.
Как из батника или командной строки запустить команду powershell с возвратом данных.
Это можно?
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,594
Реакции
6,036
Баллы
808
Да. Конечно.
Вот пример с обходом ограничения на исполнение неподписанных скриптов,
с передачей скрипту PS двух параметров
и возвратом результата обратно в виде распечатки в окне CMD:

CMD/BATCH:
@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
 

Кирилл

Команда форума
Администратор
Сообщения
14,216
Реакции
6,246
Баллы
1,093
Я правильно понимаю что основа здесь?
CMD/BATCH:
%SystemRoot%\System32\WindowsPowerShell\v1.0\PowerShell.exe -ExecutionPolicy ByPass -command ". 'пишем сюда свой код'"
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,594
Реакции
6,036
Баллы
808
пишем сюда свой код
Вот так:

Код:
%SystemRoot%\System32\WindowsPowerShell\v1.0\PowerShell.exe -ExecutionPolicy ByPass -command "пишем сюда свой код"

Расположение процессора Powershell лучше определять специальным скриптом (т.к. в разных ОС может быть по-разному):

Код:
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). Подробнее в этой статье.Итого:
Если бы я учитывал все моменты, например, что в пути к PS могут быть пути и скобки,
основываясь на опыте, я бы написал так:
Код:
@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.
 
Последнее редактирование:

alex-s

Пользователь
Сообщения
21
Реакции
1
Баллы
43
Dragokas, вы удалили сообщение ?
я не зафиксировал ваш ответ у себя, восстановите ваш ответ пожайлуста
 
Сверху Снизу