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"