Updated 22 August 2010 for release 1.1.0.0 - includes PowerShell cmdlet to upgrade Features of all scopesProject DescriptionA set of tools for managing upgradable Features in SharePoint 2010. (Upgrading Features is a means of deploying code/artifact updates to existing SharePoint sites).
Background
SharePoint 2010 introduces the concept of 'versioned' or 'upgradable' Features, as a means of applying updates to existing sites. A new version of a Feature is created by modifying the definition (with new XML or code) and incrementing the version number. For the change to be applied, existing Feature
instances (e.g. in each web for a web-scoped Feature) must be upgraded.
SharePoint 2010 does not ship with any admin screen, STSADM command or PowerShell cmdlet to manage this process. The only way to upgrade Features is to write code - however, this kit provides tools so that no code is required on your behalf; I've done it for you.
(Read a 5 part series on Feature upgrade on my blog -
http://www.sharepointnutsandbolts.com/2010/06/feature-upgrade-part-1-fundamentals.html)
What's in the kit
The kit is comprised of 3 things:
- An application page in Central Admin - administrators can use this to upgrade Features of any scope across the entire farm
- An OPTIONAL page in each site collection's Site Settings - this can be used to devolve responsibility for upgrading Features (and therefore updating functionality provided by developers) to local site administrators. A Feature must be enabled on each site to enable this.
- A PowerShell cmdlet which allows Feature upgrade to be run from script.
Usage
Central Admin page
After deploying updates to a Feature, this page can be used to find and upgrade instances of the Feature across the farm. The tool is accessed from the System Settings area with Central Admin:

Farm administrators can then select the scope (Farm, WebApplication, Site or Web) and then find the Features which require upgrade (this uses a set of methods named QueryFeatures() in the SharePoint API). In the image below I've selected 'WebApplication' as the scope and clicked 'Search' to display the results:

I can use the checkboxes to selectively upgrade some instances and not others (by default all will be upgraded, but this can be controlled by deselecting checkboxes). In the image below I've upgraded 1 of the 2 web application Features found previously - the success/failure result of all feature instances are shown on the page:

In the example above, the selected Feature has now been upgraded.
To help the experience when used in larger farms, when the Central Admin page is used to upgrade Site or Web scoped Features, filters appear to allow you to restrict the scope of the query. So for upgrading Site-scoped Features, a selector appears allowing to select the parent web application:

Similarly for Web-scoped Features, you filter on parent site collection:
Usage
Site Settings page
The Site Settings page works in a very similar way, except only Site and Web-scoped Features can be upgraded (in the current site collection). The tool is accessed from the Site Settings area for the site collection:

Site collection administrators can then select the scope (e.g. Site or Web) and then find the Features which require upgrade (this uses a set of methods named QueryFeatures() in the SharePoint API). In the image below I've selected 'Web' as the scope and clicked 'Search' to display the results:

I can use the checkboxes to selectively upgrade some instances and not others (by default all will be upgraded, but this can be controlled by deselecting checkboxes). In the image below I've upgraded 2 of the 4 web Features found previously - the success/failure result of all feature instances are shown on the page:
PowerShell cmdlet
# Farm Features
Upgrade-SPFeatures -Scope Farm
# Web application Features
Upgrade-SPFeatures -Scope WebApplication
# Site collection Features
Upgrade-SPFeatures -Scope Site -WebApplication "http://myUrl"
# Web Features
Upgrade-SPFeatures -Scope Web -Site "http://myUrl/sites/site1"
For more information on using the cmdlet, see my blog post at
http://www.sharepointnutsandbolts.com/2010/08/feature-upgrade-part-5-using-powershell.html