Файл PowerShell .ps1 в событии посткомпиляции Visual Studio - PullRequest
5 голосов
/ 02 сентября 2011

Я пытаюсь выполнить следующий код события после сборки, но получаю бесполезную ошибку:

"c:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -file "$(SolutionDir)tools\nuget_pack.ps1"

Я выполнил следующий сценарий PS, прежде чем пытаться:

Set-ExecutionPolicy unrestricted

Чего мне не хватает?

UPDATE

Это странно, я не получаю ошибку на VS сейчас. но скрипт не работает. Когда я запускаю его в консоли powershell, я получаю следующую ошибку:

enter image description here

Ответы [ 3 ]

11 голосов
/ 03 сентября 2011

Visual Studio записывает сценарий события после сборки в файл .BAT и выполняет его с помощью cmd.exe.Так что использование & "<path-to-powershell>" не сработает.Просто выполните:

Powershell.exe -file "$(SolutionDir)tools\nuget_pack.ps1"

И если вы считаете, что вы можете столкнуться с проблемами политики выполнения на других машинах, на которых построено решение, подумайте о следующем пути:

Powershell.exe -ExecutionPolicy Unrestricted -file "$(SolutionDir)tools\nuget_pack.ps1" 
7 голосов
/ 02 сентября 2011

Вы можете воспроизвести ошибку в Powershell следующим образом:

"this is a string" -file "my.ps1"

Он принимает первое как строку, -file как флаг формата -f и говорит, что у него нет выражения значения справа для замены формата.

Попробуй так:

& "c: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" -file "$ (SolutionDir) tools \ nuget_pack.ps1"

(как отмечает Кит, это не будет работать, поскольку он запускается из файла bat, чем Powershell.)

Или просто:

powershell.exe -file "$(SolutionDir)tools\nuget_pack.ps1"
0 голосов
/ 19 января 2017

Перед вызовом скрипта Power-Shell из Visual Studio, установите ExecutionPolicy на неограниченное значение из окна Power-Shell, как это ...

Set-ExecutionPolicy -Scope CurrentUser;
ExecutionPolicy: unrestricted;

скрипт вызова power-shell следующим образом ...

powershell.exe $(SolutionDir)Setup.ps1 -SolutionDir $(SolutionDir) -ProjectPath $(ProjectPath)

enter image description here

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

param([string]$SolutionDir,
     [string]$ProjectPath);
#Write-Host ($SolutionDir +" Call this script with following aruments");
#Write-Host ($ProjectPath +" Call this script with following aruments");
...