The PowerShell script relies on the wsp’s being in a folder structure similar to this:
If this doesn’t suit your requirements simply change the bits in the script that sets the $targetEnvironment variable, either get it from some other environment variable you can use or pass a parameter to the script.
$WhatIfPreference = 0 <# creates files 01 - Retract.bat, 02 - Delete.bat, 03 - Add.bat, 04 - Deploy.bat. For each wsp found and matched the relevant stsadm command is added to the files. Drop this file into the release folder where you want to create the bat files. #> $devUrl = "http://vs.dev.intra.sample.org" $testUrl = "http://vs.test.intra.sample.org" $liveUrl = "http://vs.intra.sample.org" $uatUrl = "http://vs.uat.intra.sample.org" $execadmjobs = "stsadm -o execadmsvcjobs" #set working directory to current execution dir $invocation = (Get-Variable MyInvocation -Scope 0).Value Set-Location (Split-Path $invocation.MyCommand.Path) #target environment is picked up from the execution path $targetEnvironment = "dev" if($invocation.MyCommand.Path.Contains("dev")) { $targetEnvironment = "dev"; } if($invocation.MyCommand.Path.Contains("test")) { $targetEnvironment = "test"; } if($invocation.MyCommand.Path.Contains("live")) { $targetEnvironment = "live"; } if($invocation.MyCommand.Path.Contains("uat")) { $targetEnvironment = "uat"; } #Retract values $retractors = @{ "VS.SomeFeature.wsp" = "stsadm -o retractsolution -name VS.SomeFeature.wsp -immediate"; "VS.SomeOtherFeature.wsp" = "stsadm -o retractsolution -nameVS.SomeOtherFeature.wsp -allcontenturls -immediate "; } #Delete values $deleters = @{ "VS.SomeFeature.wsp" = "stsadm -o deletesolution -name VS.SomeFeature.wsp"; "VS.SomeOtherFeature.wsp" = "stsadm -o deletesolution -name VS.SomeOtherFeature.wsp"; } #Add values $adders = @{ "VS.SomeFeature.wsp" = "stsadm -o addsolution -filename VS.SomeFeature.wsp"; "VS.SomeOtherFeature.wsp" = "stsadm -o addsolution -filename VS.SomeOtherFeature.wsp"; } #Deploy values $deployers = @{ "VS.SomeFeature.wsp" = "stsadm -o deploysolution -name VS.SomeFeature.wsp -immediate -allowGacDeployment -force"; "VS.SomeOtherFeature.wsp" = "stsadm -o deploysolution -name VS.SomeOtherFeature.wsp -url URLTOREPLACE -immediate -allowGacDeployment -force"; } New-Item -name "01 - Retract.bat" -type file New-Item -name "02 - Delete.bat" -type file New-Item -name "03 - Add.bat" -type file New-Item -name "04 - Deploy.bat" -type file Get-ChildItem -name -include *.wsp | foreach-object -process {out-file -filepath "01 - Retract.bat" -append -encoding Ascii -inputobject $retractors[$_]} Get-ChildItem -name -include *.wsp | foreach-object -process {out-file -filepath "02 - Delete.bat" -append -encoding Ascii -inputobject $deleters[$_]} Get-ChildItem -name -include *.wsp | foreach-object -process {out-file -filepath "03 - Add.bat" -append -encoding Ascii -inputobject $adders[$_]} Get-ChildItem -name -include *.wsp | foreach-object -process {out-file -filepath "04 - Deploy.bat" -append -encoding Ascii -inputobject $deployers[$_]} Add-Content -encoding Ascii -path "01 - Retract.bat" -value $execadmjobs Add-Content -encoding Ascii -path "04 - Deploy.bat" -value $execadmjobs Add-Content -encoding Ascii -path "01 - Retract.bat" -value "pause" Add-Content -encoding Ascii -path "02 - Delete.bat" -value "pause" Add-Content -encoding Ascii -path "03 - Add.bat" -value "pause" Add-Content -encoding Ascii -path "04 - Deploy.bat" -value "pause" switch($targetEnvironment){ "dev" {(get-content "04 - Deploy.bat") | foreach-object {$_ -replace "URLTOREPLACE", $devUrl} | set-content "04 - Deploy.bat";break} "test" {(get-content "04 - Deploy.bat") | foreach-object {$_ -replace "URLTOREPLACE", $testUrl} | set-content "04 - Deploy.bat";break} "live" {(get-content "04 - Deploy.bat") | foreach-object {$_ -replace "URLTOREPLACE", $liveUrl} | set-content "04 - Deploy.bat";break} "uat" {(get-content "04 - Deploy.bat") | foreach-object {$_ -replace "URLTOREPLACE", $uatUrl} | set-content "04 - Deploy.bat";break} } $WhatIfPreference = 0To use it just add the relevant stsadm commands for your wsp’s to the arrays $retractors, $deleters, $adders and $deployers in this format:
"WspName.wsp" = "stsadm command";Lines 62 – 65 creates the new .bat files in the current directory.
Lines 67 – 70 iterates over all .wsp files it finds in the current directory and adds the relevant stsadm command to the .bat files if a match is found in the arrays.
Lines 79 – 83 replaces any occurrence of [URL] in the commands with the relevant url for the target environment.
If you have 20-30 wsp’s this can be a real time saver as now all you have to do to create the batch files is to drop the wsp's for your current release into a folder alongside the script and execute it. On a 2003 app server you can just double click each batch file in order for the actual SharePoint deployment, on a 2008 server you might have to run a command prompt as Administrator and execute the batch files through that.
The script can be downloaded here.
No comments:
Post a Comment