For development you can use Visual Studio 2010 features (right click deploy) to install web parts and features, but once you get into testing/staging and production enviornemnts you can use the following script
Web Parts
POWERSHELL-SharePoint-WebPart.ps1
Add-PsSnapin Microsoft.SharePoint.PowerShell
Write-Host "Initializing parameters"
$featureAction=$args[3]
$CurrentDir=$args[0]
$solutionName=$args[1] + ".wsp"
$webpartName=$args[1]
$SolutionPath=$CurrentDir + "\" + $solutionName
$logfile=$CurrentDir + "\" + $webpartName + "_" + $featureAction + ".log"
$urlPath=$args[2]
$installToURL=$args[4]
if (( $urlPath -eq $null) -or ( $installToURL -eq $null ))
{
$installToURL="No"
}
Write-Host "Logfile: " $logfile " Starting...."
Start-Transcript $logfile
if ( $featureAction -eq "Remove")
{
Write-Host "Rretracting and uninstalling solution:" $solutionName
Uninstall-SPSolution -Identity $solutionName -allwebapplications -Confirm:$false
Write-Host "Waiting till retaction has finished " -nonewline
do
{
Start-Sleep 2
Write-Host "." -nonewline
}
while ((Get-SPSolution $solutionName).Deployed)
Start-Sleep 5
Write-Host "." -nonewline
Write-Host "Removing solution:" $solutionName " "
Remove-SPSolution -Identity $solutionName -Confirm:$false
Write-Host $solutionName " Now Removed!"
}
if ( $featureAction -eq "Install")
{
Write-Host "Adding solution:" $solutionName " "
Add-SPSolution $SolutionPath
if ( $installToURL -ne "Yes" )
{
Write-Host "Deploying solution:" $solutionName "to GAC "
Install-SPSolution -Identity $solutionName -AllWebApplications -GACDeployment -CASPolicies -Confirm:$false
}
else
{
Write-Host "Deploying solution:" $solutionName "to" $urlPath "and GAC "
Install-SPSolution -Identity $solutionName -WebApplication $urlPath -GACDeployment -Confirm:$false
}
Write-Host "Waiting till deployment has finished " -nonewline
do
{
Start-Sleep 2
Write-Host "." -nonewline
}
while ((Get-SPSolution $solutionName).Deployed)
Start-Sleep 5
Write-Host "." -nonewline
Write-Host $solutionName " Now installed!"
}
if ( $featureAction -eq "Update")
{
Write-Host "Updating solution:" $solutionName " "
Update-SPSolution -Identity $solutionName -LiteralPath $SolutionPath -GACDeployment -Confirm:$false
Write-Host $solutionName " Now updated!"
}
Write-Host ""
Stop-Transcript
Remove-PsSnapin Microsoft.SharePoint.PowerShell
To use POWERSHELL-SharePoint-WebPart.ps1, create dos bat file called mywebpart-install.bat
@echo off REM Current Site Collection REM Script to install webpart Dir webpart Name to Install to Action (Install, Update, Remove) REM ---------------------------------- ------ -------------- ------------------- ------------ powershell -file ".\POWERSHELL-SharePoint-WebPart.ps1" "%CD%" "mywebpart" "http://stage.company.com" "Install"
FEATURES
POWERSHELL-SharePoint-Feature.ps1
Add-PsSnapin Microsoft.SharePoint.PowerShell
Write-Host 'Will initialize parameters'
$CurrentDir=$args[0]
$solutionName=$args[1] + ".wsp"
$featureName=$args[1]
$SolutionPath=$CurrentDir + "\" + $solutionName
$urlPath=$args[2]
$action=$args[3]
$logfile=$CurrentDir + "\" + $args[1] + "_" + $action + ".log"
Write-Host "Logfile: " + $logfile + " Starting...."
Start-Transcript $logfile
$errorActionPreference = 'Inquire'
if ( $action -eq "Remove" )
{
Write-Host $action ' ' $featureName '....'
Write-Host 'Will now disable feature, ' $featureName ' for all site in Site Collection in ' $urlPath
# Get Feature object
$feature = Get-SPFeature $featureName
#Get web application
$webApp = Get-SPWebApplication -Identity $urlPath
#Deactivate site scoped feature for all site collections in a Web Application (checks to see if the feature is activated before attempting to deactivate)
Write-Host 'Will now deactivate solution:' $solutionName
$webApp | Get-SPSite -limit all | ForEach-Object {
Write-Host '...Checking Site ' $_.Url ' for ' $solutionName
if ($_.Features[$feature.ID]) {
Write-Host '... ...deactiviatng feature ' $solutionName ' from ' $_.Url
Disable-SPFeature $feature -Url $_.Url -Force -Confirm:$false
}
}
$solution = Get-SPSolution | where-object {$_.Name -eq $solutionName}
Write-Host 'Will now retract solution:' $solutionName
Uninstall-SPSolution -Identity $solutionName -Confirm:$false
#Wait for solution to be uninstalled
while ($solution.Deployed -eq $true)
{
Write-Host '.' -nonewline
Start-Sleep -s 1
}
#make sure job is finished
while ( $solution.JobExists )
{
write-host '.' -nonewline
sleep 1
}
write-host ''
Write-Host 'Will now remove solution:' $solutionName
Remove-SPSolution -Identity $solutionName -force -Confirm:$false
}
if ( $action -eq "Install")
{
Write-Host 'Will now add solution:' $solutionName
Add-SPSolution -LiteralPath $SolutionPath
Write-Host 'Will now deploy solution:' $solutionName
Install-SPSolution -Identity $solutionName -GACDeployment -force
$solution = Get-SPSolution | where-object {$_.Name -eq $solutionName}
while ( $solution.JobExists )
{
write-host '.' -nonewline
sleep 1
}
write-host ''
write-host 'Solution, ' $solutionName ', ' $action '!'
}
if ( $action -eq "Update")
{
Write-Host 'Will now update solution:' $solutionName
Update-SPSolution -Identity $solutionName -LiteralPath $SolutionPath -GACDeployment -force
$solution = Get-SPSolution | where-object {$_.Name -eq $solutionName}
while ( $solution.JobExists )
{
write-host '.' -nonewline
sleep 1
}
write-host ''
write-host 'Solution, ' $solutionName ', ' $action '!'
}
#place bland line to fix log format
write-host ' '
#Stop Log
Stop-Transcript
#fix output file so it has newlines in notepad
[string]::Join("`r`n",(Get-Content $logfile)) | Out-File $logfile
Remove-PsSnapin Microsoft.SharePoint.PowerShell
To use POWERSHELL-SharePoint-Feature.ps1, create dos bat file called
myFeature-install.bat
@echo off REM Current Site Collection REM Script to install feature Dir feature Name to Install to Action (Install, Update, Remove) REM ---------------------------------- ------ -------------- ------------------- ------------ powershell -file ".\POWERSHELL-SharePoint-WebPart.ps1" "%CD%" "myfeature" "http://stage.company.com" "Install"