In case of big SharePoint Farms with large application domain we need to deploy multiple solutions, Doing it manually will be a lot tough and time consuming task. So a more manageable way could be to create a PowerShell script, that runs on the Farm to deploy the listed wsp solutions. I created one of such solution for a client who had around 50-60 such solutions. Below is the script that you can use to deploy wsp's solutions to SharePoint Farm. This script should be placed inside a folder along with the wsp solutions which needs to be deployed.
Copy-Paste the below script in a text file and rename its extension to - *.ps1
Copy-Paste the below script in a text file and rename its extension to - *.ps1
function LoadSharePointPowerShellEnvironment
{
write-host
write-host
"Setting up PowerShell environment for
SharePoint..." -foregroundcolor Yellow
write-host
Add-PSSnapin
"Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue
write-host
"SharePoint PowerShell Snapin loaded."
-foregroundcolor Green
}
function DeploySolution($packageName,
$packagePath,
$WebAppUrl)
{
$spAdminServiceName =
"SPAdminV4"
#check if solution already exists
$solution = Get-SPSolution $packageName
-ErrorAction SilentlyContinue
if ($solution
-ne $null)
{
#Write-Host
#Write-Warning
"The solution $packageName already exists. Press Enter if you want to
deploy that solution,
#else first
uninstall the solution and re-run the exe."
#Read-Host
#Deploy
the solution
if
($solution.Deployed)
{
Write-Host
Write-Host "
$packageName Already deployed... " -foregroundcolor
Red
}
else
{
if (!$solution.ContainsWebApplicationResource)
{
Write-Host
"Deploying solution $packageName to the
Farm..."
$solution
| Install-SPSolution
-GACDeployment -Force
-Confirm:$false
}
else
{
if
($WebAppUrl -eq
$null -or
$WebAppUrl.Length
-eq 0)
{
Write-Warning
"The solution $packageName contains web application resources but no web
applications were specified to deploy to."
return
}
else
{
Write-Host
"Installing solution $packageName to
WebAppUrl"
$solution
| Install-SPSolution
-GACDeployment
-WebApplication $WebAppUrl
-Force -Confirm:$false
}
}
Write-Host
Write-Host "starting
admin service...(this may take few minutes to complete)" -foregroundcolor Yellow
Stop-Service -Name
$spAdminServiceName
Start-SPAdminJob -Verbose
Start-Service -Name
$spAdminServiceName
#Block until we're sure the solution is
deployed.
do { Start-Sleep
2 } while
(!((Get-SPSolution
$packageName).Deployed))
Write-Host
Write-Host "
$packageName Deployed Sucessfully... " -foregroundcolor
Green
}
}
else
{
#Add
the solution
#Write-Host
#Write-Host
"Adding solution... $packageName..." -foregroundcolor Yellow
#$solution
= Add-SPSolution $packagePath
Write-Host
"Solution Not Found ... $packageName..."
-foregroundcolor Red
}
}
#
#
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Deploy
the package
#
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#
LoadSharePointPowerShellEnvironment
Write-host "Deploying
Solution..." -foregroundcolor Yellow
Write-Host
write-host "Enter
the Web Application Url where you need to deploy the solution..."
[string]$Url
= Read-Host
[string]$WebAppUrl
= $Url.Trim()
$objSite = Get-SPSite $WebAppUrl
-ErrorAction SilentlyContinue
if($objSite
-eq $null)
{
Write-Host
Write-Host
"Web Application Url not correct or Web
application doesnot extsts. Re-run the exe with correct url." -foregroundcolor Red
Read-Host
}
else
{
$dir = $(gl)
$list
= Get-ChildItem
$dir |
where {$_.extension -eq
".wsp"}
$currentDir
= Get-Location
foreach($my_file in Get-ChildItem $list)
{
write-host
$my_file.Name
[string]$packageName
= $my_file.Name
[string]$packagePath =
$currentDir.Path
+ "\"
+ $packageName
DeploySolution
$packageName $packagePath
$WebAppUrl
}
}
No comments:
Post a Comment