Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Powershell script in Visual Studio 2010 Post-Build Step

I have a powershell script that works wonderfully from the powershell shell and from a cmd window, and now I am trying to launch it from a post-build step in Visual Studio.

After several different variations of trying to get this to lunch and run successfully, I currently have the following configuration for the "Command Line" property of the "Post-Build Event" in VS2010.

This is all on one line in the Post-Build configuration, but I've wrapped the text here just for readability:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NonInteractive
-File "$(SolutionDir)testScript.ps1"
-ConfigurationFile "$(SolutionDir)configuration.txt"
-SolutionDir "$(SolutionDir)"
-Platform "$(Platform)"
-Configuration "$(Configuration)"

The powershell script expects 4 mandatory parameters: ConfigurationFile, SolutionDir, Platform, and Configuration. As you can see, I am providing each of those parameters above, and am enclosing them in double quotes to protect against spaces in the values.

In VS2010, the SolutionDir macro expands to a path that has spaces, Platform expands to "Release", and Configuration expands to "Win32".

When the post-build step executes, this is the error I get:

testScript.ps1 : Cannot process command because of one or more missing
mandatory parameters: Platform Configuration.
    + CategoryInfo          : InvalidArgument: (:) [testScript.ps1], 
    ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingMandatoryParameter,testScript.ps1

...any ideas what I could be missing? It is apparently able to find the script in $(SolutionDir), but I can't tell whether it's picking up any of the command line arguments. Could the trailing '\' character in $(SolutionDir) be hanging this up?

like image 814
Hoobajoob Avatar asked Dec 12 '22 21:12

Hoobajoob


1 Answers

The variable $(SolutionDir), since it is a directory ends in a backslash '\'. So, when the variable is expanded, the argument for -SolutionDir "$(SolutionDir)" looks like this:

-SolutionDir "c:\Your Solution Dir\"

when this is parsed the final slash effectively escapes the closing quote and the shell parser does not see the end of the argument, so the parameter to -SolutionDir "sucks in" the rest of the arguments into the SolutionDir argument. You can fix this by escaping the final backslash with another one by adding a trailing slash:

-SolutionDir "$(SolutionDir)\"

like image 156
zdan Avatar answered Dec 28 '22 04:12

zdan