Назад | Перейти на главную страницу

Как запустить сценарий PowerShell из командной строки ОС?

У меня есть сценарий PowerShell для создания файлов проекта, и я хотел бы иметь возможность запускать его из командной строки моего файлового менеджера (и, возможно, сделать ярлык для этого сценария, чтобы я мог начать сборку со своего рабочего стола)
Как это сделать?

Один из способов сделать это - создать командный файл с соответствующими командами.

build.bat

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -command "& 'c:\scripts\build_project.ps1' "

Вам нужно будет передать аргументы командной строки из командного файла в сценарий, если ваш сценарий ps использует их. Вам также нужно будет загрузить все модули PowerShell, которые использует ваш скрипт:

Add-PSSnapin Module-Name

Если вы хотите, чтобы сценарии PowerShell вели себя немного больше как типичные сценарии cmd \ bat, где вы можете просто ввести имя и заставить их выполнить, вы можете настроить ассоциацию и тип файла, чтобы указать оболочке передать правильные параметры в Powershell и установить переменная patheext, поэтому вам просто нужно ввести имя сценария, а не полное имя. ext.

Сначала проверьте, что расширение .ps1 связано с Powershell - это должно быть, но стоит убедиться:

assoc .ps1

Это должно дать вам что-то вроде следующего:

.ps1=Microsoft.PowerShellScript.1

Теперь переопределите поведение открытия по умолчанию (открытие с помощью блокнота) для этого типа файла с помощью синтаксиса командной строки Powershell для вызова сценария. Нам нужно добавить дополнительные кавычки вокруг параметра & 1 для обработки путей с пробелами.

ftype Microsoft.PowerShellScript.1="c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe" "& '&1'"

Если вы действительно хотите, чтобы сценарии Powershell действовали как другие файлы сценариев, измените патекст переменная окружения. В идеале установите это через My Computer-> Properties-> Advanced System Settings-> Advanced tab-> Environment Variables, но вы можете временно установить это в оболочке cmd через:

set pathext=.ps1;%pathext%