Skip to main content

The MS Sharepoint Blog

Syndicate content
The official blog of the Microsoft SharePoint Product Group
Updated: 2 days 1 hour ago

ShowMe for SharePoint 2010

Fri, 2010-08-06 02:43
How We Did It: ShowMe for SharePoint 2010

Not surprisingly, one of the most frequent requests from SharePoint customers is for information worker training and more comprehensive help for end users. This issue cuts across the rich, diverse, and powerful capabilities of SharePoint; it applies regardless of whether information workers use the platform for collaboration, insights, search, content publishing, community building, or assembling their own composite solutions. Given the successful release of SharePoint 2010, with its completely new user interfaces and its impressive array of new features, almost every organization that implements SharePoint will encounter this request for more comprehensive help and training. At Point8020 Limited, we have worked with the SharePoint team at Microsoft for many years to create official training courses, videos, evaluation guides, and other educational material. It seemed only natural, then, for us to provide an answer to this most common of requests from SharePoint customers and partners.

Some might say we got carried away, seeing that we took this issue to the extreme and built a rich, engaging, video-based solution that provides on-demand, 'how-to' videos to SharePoint users. We're glad we did though, as we ended up integrating our solution right into the SharePoint user interface where it is most useful!

Our solution is called ShowMe for SharePoint 2010, and I'd like to take this opportunity to describe the benefits of our solution and also to describe how we developed it.

Overcoming the biggest barriers to returns on investment in SharePoint 2010

Organizations can be somewhat reluctant to roll out SharePoint 2010, even though they know that the new platform can introduce many efficiencies into how their employees work. The problem lies  not with what SharePoint 2010 is capable of, but rather with the daunting task of ensuring that your information workers can adapt to some of the new ways of working.

To paraphrase one of the most important questions: 'What's the point of a new, improved version of SharePoint if our employees don't know how to use it?'

 Perhaps an even trickier concern is 'We know that SharePoint 2010 will eventually introduce new efficiencies, but won't our current productivity levels diminish while everyone gets up to speed?'

In short, you want to know that what you spend on deploying SharePoint 2010 will quickly show a return on investment and increased business value for your organization. This applies whether you are implementing an upgrade from WSS 3.0/MOSS 2007 or whether this is your first time deploying SharePoint. And you know that the biggest, most pervasive barrier to such deployments is adoption of the new platform by your information workers.

That's exactly what ShowMe for SharePoint 2010 provides: It helps your users get up to speed in an incredibly short time.

Why users need help with SharePoint 2010

One of the most common reasons why your users need help and training in using SharePoint 2010 is that it provides a completely new user interface. So much so that even actions with which your users are familiar from previous versions are now performed in new ways. Providing help and training ensures that current productivity levels for upgrade scenarios do not diminish.

Another reason why your users need help and training is that SharePoint 2010 provides much more efficient ways of working, compared to previous versions of the platform. And, of course, you want your users to start working more efficiently, otherwise why upgrade? So showing them quickly how to achieve specific tasks efficiently must be one your goals.

Taking these concepts further, SharePoint 2010 provides completely new capabilities with which even the most experienced of your users will initially be unfamiliar. You need to raise awareness of these new capabilities and show your information workers  how to use them, or the huge value that your organization can derive from SharePoint 2010 will remain unrealized.

What is our solution?

The main driver for our efforts was to develop a solution that provides video-based, on-demand help that can show information workers how to perform many tasks in SharePoint 2010. In fact, specific words in what I've just stated are key:

§  Video-based. Our approach has always been that the best way to teach a complex product is to break it down into bite-size chunks and show people how that specific bit can be used. Our solution includes 101 videos, all of which are focused on one specific task and almost all of which are less than two minutes long. (Many are less than one minute in length!) In brief, our videos are consumable and useful and don't take valuable time away from the user performing their tasks!

§  On-demand. We provide help and training to users when and where they need it. Our solution is integrated into the SharePoint user interface, so information workers can get help and learn while actually performing the tasks they need to fulfil their role in your organization.

§  In SharePoint. The key with integration into the SharePoint user interface is to make use of the amazing new (and not-so-new) features of SharePoint to deliver our solutions. For example, we provide access to our solution from the standard Site Actions menu, from the new context-sensitive ribbon, and through search results.

What does the solution look like?

The following screenshots show the key integration points of ShowMe for SharePoint 2010 with the new user interface of SharePoint.

Figure 1 shows how our solution adds a context-sensitive ribbon tab called 'ShowMe'. This ribbon tab appears when users need it, in 50 different contexts. You can see the controls on the ribbon tab - each control leads to multiple videos in that specific category.

Figure 1. The ShowMe for SharePoint 2010 Ribbon Tab

Figure 2 shows the engaging Silverlight-based help and training system that appears when a user clicks a control on the ribbon. Users can watch videos right here. They can also navigate through the other categories, all of which is provided in an iTunes-style, engaging user interface. (Well, we had to make it look good, didn't we?)

Figure 1. The ShowMe for SharePoint 2010 User Experience.

There are 101 short, bite-size videos that your users can learn from. We have assessed the core tasks that are undertaken by users and ensured that ShowMe for SharePoint 2010 covers those core tasks. We will be creating even more videos over the next few months and these will become available to our customers and partners free of charge! For the current list of videos, refer to our FAQ. (This FAQ topic has a link to the list of videos that we keep up to date.)

Figure 3 shows how the solution is accessible through the Site Actions menu. This ensures that regardless of context, the solution is 'always available' to your users.

Figure 3. The ShowMe for SharePoint 2010 Site Actions Menu.

One other integration point is extremely important: Search! Your information workers use the built-in search features as part of their daily tasks, so we ensured that the words spoken in our videos are indexed and that relevant videos appear in normal search results. This is a 'first' for SharePoint 2010 Enterprise Search in the entire world!

To see all of these features in action, you can view our demo.

How did we build it?

The key development efforts for our solution were:

§  Building a rich, engaging user interface. More development effort was required for this part of our solution than for the rest of the product put together, but Silverlight proved to be the ideal development platform. We made extensive use of the new SharePoint 2010 Client Object Model for Silverlight which now makes building rich interactive applications on SharePoint a reality. In short, Silverlight provides the slick user interface components (such as navigation and being able to play videos) while SharePoint provides storage for the videos, images and configuration files. The client object model bridges the gap between these two different environments, so we are eternally grateful to the SharePoint team for providing this key bridging technology! Without the client object model, our development would have taken much more time and effort.

§  Integration with the ribbon and Site Actions menu. The good news is that this bit turned out to be relatively easy. We created ribbon controls by using what's called the 'declarative' model. Truth be told, this took some getting used to, but the documentation for ribbon control development is getting better and better as time goes by!

§  Integration with the SharePoint client-side dialog platform. As you can see from the screenshots, our solution is typically displayed in dialogs that are similar to the built-in ones provided by SharePoint. This development was pretty straightforward and turned out to be one of the joys of SharePoint user interface development. Who knew it could be so easy? Well, we did as it happens, because we wrote the official developer Getting Started course for Microsoft! You can learn more about dialog development in Module 10 of the Getting Started course.

Next Steps:

For more information about ShowMe for SharePoint, you can refer to the FAQ page.

If you want to evaluate and play with ShowMe for SharePoint 2010, you can download the fully-featured evaluation version.

If you are a Microsoft Partner and want to learn how you can use our learning solutions to drive SharePoint adoption and create business value for you and your customers, you can refer to our partner program.

If you want more information or insight into our learning solutions, feel free to contact us!

About the Blogger

Martin Harwar is Chief Solution Architect for Point8020 Limited. He develops content for the SharePoint team at Microsoft as well as developing learning solutions based on Silverlight and SharePoint.

 

Announcing the release of the SharePoint 2010 Administration Toolkit V1

Fri, 2010-07-16 06:00

I am pleased to announce the availability of the first version of the SharePoint 2010 Administration Toolkit. In this toolkit we’ve included a couple of tools that were shipped releases and are now adapted to SharePoint 2010, along with two new tools.

·         User Profile Replication Engine 2010 (UPRE2010): this tool got a complete overhaul and was converted to PowerShell. It now allows you to replicate Profile and Social data between SharePoint 2010’s User Profile Application (UPA), as well as backward compatibility with SharePoint 2007’s SSP. You can replicate between SSP’s or UPA services, as well as across versions. (Note that only Profile data can be replicated across versions, as SSP contains no Social activity tracking).

·         The Security Configuration (SCW) Manifest: SCW is an attack surface reduction feature in Windows Server. This manifest adds roles for SharePoint 2010 Products to Windows Server 2008 with SP2 or Windows Server 2008 R2.

·         The Content Management Interoperability Services (CMIS) Connector: enables SharePoint users to interact with content stored in any repository that has implemented the CMIS standard, as well as making SharePoint 2010 content available to any application that has implemented the CMIS standard.

·         The Load Testing Kit (LTK): LTK generates a Visual Studio Team System 2008 (VSTS) load test based on Windows SharePoint Services 3.0 IIS logs. The VSTS load test can be used to generate synthetic load against Microsoft SharePoint Foundation 2010 as part of a capacity planning exercise or a pre-upgrade stress test.

 

The toolkit can be downloaded from here: http://www.microsoft.com/downloads/details.aspx?FamilyId=718447d8-0814-427a-81c3-c9c3d84c456e&displaylang=en

 

The toolkit documentation can be found here:

SharePoint Foundation 2010: http://technet.microsoft.com/en-us/library/cc508986.aspx

SharePoint Server 2010: http://technet.microsoft.com/en-us/library/cc508851.aspx  

 

Doron Bar-Caspi

Sr. Program Manager, SharePoint

Back by Popular Request - Live Chats with MVP Experts

Thu, 2010-07-15 06:23

Do you have questions about SharePoint? Want to learn more about the recently launched SharePoint 2010?  By popular request, SharePoint MVPs from around the world are participating in a live chat event about SharePoint. These Q&A events are a great opportunity to tap into the vast knowledge of these industry professionals who are regarded as the best in their field. 

Please join us on Wednesday July 21st at 9am PDT!

Learn more and add these chats to your calendar by visiting the MSDN event page http://msdn.microsoft.com/en-us/chats/default.aspx

Developing Applications for SharePoint 2010

Thu, 2010-07-01 00:30

Microsoft patterns & practices is excited to announce the release of:

Developing Applications for SharePoint 2010

SharePoint 2010 introduces new ways of developing applications for the SharePoint platform. With SharePoint 2010, you can build multi-tenant, hosted applications on an infrastructure that is scalable, secure, and stable. You can create powerful, data-driven solutions using SharePoint lists or external data. You can create client-side functionality that takes advantage of modern browser capabilities and Silverlight to provide a rich user experience. These new features, operational models, and development tools make SharePoint a more complete application platform, and it also introduces new design and development decisions for customers. This guidance helps customers understand the decision points, tradeoffs, and performance implications that the new functionality introduces; it also helps customers learn how to take best advantage of the new capabilities that SharePoint 2010 provides.

                                

What’s in Developing Applications for SharePoint 2010?

 

Component

Description

The guide

"Application Foundations for SharePoint 2010" describes approaches you can use to address the challenges of testability, flexibility, configuration, logging and exception handling, and maintainability; it also explains how to use the SharePoint Guidance Library components in these areas.

"Execution Models in SharePoint 2010" provides deep technical insights into the mechanics of the full-trust execution environment, the sandbox execution environment, and various hybrid approaches to executing code in SharePoint applications.

"Data Models in SharePoint 2010" explains new list and external data functionality and data access techniques, key design decision points that can help you to choose between standard SharePoint lists and external lists, and techniques and patterns to address large lists and list aggregation.

"Client Models in SharePoint 2010" provides guidance on how to best use the new client-side functionality to access data and build richer client experiences with Silverlight and Ajax.

Each section also contains a set of how-to topics. These explain how to perform specific tasks that the team found challenging to discover.

Reference implementations

This release includes eight reference implementations that you can deploy to a SharePoint 2010 test environment. The reference implementations reinforce the key concepts in the guide and illustrate how to build applications that reflect real-world scenarios. Each reference implementation includes a detailed scenario and design overview, an explanation of the design decisions the team faced for the implementation, and an installation script to automate setup. This release includes reference implementations for the following scenarios:

·         Sandboxed solution

·         Sandboxed solution with a full-trust proxy

·         Sandboxed solution with External List

·         Sandboxed solution with custom workflow activities

·         Farm Solution (timer job)

·         SharePoint List Data Models

·         External Data Models

·         Client Application Models

The SharePoint Guidance Library

The library is a collection of reusable classes delivered as source code that address common challenges in application development for the SharePoint platform. This release improves on the previous release of the library by adding support for sandboxed solutions and taking advantage of new SharePoint features. The SharePoint Guidance Library consists of three key components:

·         SharePoint Service Locator. This provides a simple implementation of the Service Locator pattern for SharePoint applications. The service locator enables you to isolate your code from dependencies on external types, which makes your code more modular, easier to test, and easier to maintain.

·         Application Settings Manager. This provides a robust and consistent mechanism for storing and retrieving configuration settings at each level of the SharePoint hierarchy, from individual sites (SPWeb) to the entire server farm (SPFarm).

·         SharePoint Logger. This provides easy-to-use utility methods that you can employ to write information to the Windows Event log and the SharePoint Unified Logging Service (ULS) trace log. It also enables you to create custom diagnostic areas and categories for logging.

 

Click here to download this release.

Managing Upgrades on Sandbox Solutions

Thu, 2010-06-24 05:00

Sandbox solutions are a great feature on the SharePoint 2010 platform.  But as these solutions are deployed in various locations across your farm or site collection, the question of how to manage them arises.

We’re providing a PowerShell script to help you with this.  It’s pretty simple but can be extended to do more in order to fit into the tools you’re already using to manage your farms and site collections.

Let me describe what this script does: 

Every Sandbox Solution that is deployed has a Solution ID associated with it.  Inside that Solution, you will find one or more features with a Feature ID and a version number.   For a given Solution Id, this script will walk your entire farm or site collection and generate a log telling you all the locations where that solution is found.  It will then look at each feature within the Solution and add a log entry indicating which version of that feature is deployed.  It can also perform the upgrade if a new version of the Solution is provided.  This is a flag so the script can perform the upgrade or simply be used as a means for gathering information on the solution.

The script takes the following parameters:

·         File Path and Name of Solution (.wsp file) to be upgraded 

·         Switch Parameter indicating if the upgrade should be performed or not

Permissions:

·         Script assumes the person running it is the box admin and is permitted to perform the upgrade actions.

·         Permission levels are modified to grant Full Control for the admin.

·         After upgrade is complete, permissions are restored to original settings.

The log format is as follows:

·         Details on the file path and name of the solution you are examining including Solution Id.

·         Detail on each site collection that is examined

·         For each site collection

o   Information on whether or not a matching solution was found

o   If found, details on the solution file that is being removed so it may be replaced by the new version.

o   If upgrade is being performed, details on success or failure

·         A summary that includes

o   Number of site collections examined

o   If upgrade is not being performed, a summary list of the sites that will require upgrade along with details on the current version for each feature (id) in the solution.

o   If upgrade IS performed, the feature and version information accompanied by details on successful upgrade, successful new install, or the feature being unchanged because it’s already current.

A few Things to Note:

To upgrade a solution, the SharePoint 2010 platform expects the solution filenames to be different.  If they are the same, you will get an error telling you that the solution is already active.  When you upgrade a solution, the solution id will be used to find existing versions of that solution and THEN look at the version details.  The upgrade will only move you to a new version.  It will not roll back to an old version.  And if the versions are the same, it will do nothing.

We hope this script helps you manage the solutions you are deploying and makes upgrades that much easier.

# SharePoint DLL

[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

 

#Cmdlet Install

Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

 

#Log file definition

$intro = "User Solution Upgrader v1.0 - Log File"

$date = (Get-Date).ToString('yyyyMMdd')

 

Set-Variable -Name ForReading -value 1 -Option Constant

Set-Variable -Name ForWriting -value 2 -Option Constant

Set-Variable -Name ForAppending -value 8 -Option Constant

 

#Assume that the current "Domain\User" is the box admin entitled to perform the reconaissance and upgrade actions.

$admin  = $env:UserDomain + "\" + $env:UserName

if ($env:UserDomain -eq $null)

{             

                $admin = $admin.substring(1)

}

 

# Get the script's parent folder. This is where the log file will be written.

$logFolder = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent

$getACL = Get-Acl $logFolder

$access = $getACL.Access | Where { $_.IdentityReference -eq $admin }

if ($access -eq $null -or

    ($access.FileSystemRights -ne [System.Security.AccessControl.FileSystemRights]::FullControl -and

     ($access.FileSystemRights -ne [System.Security.AccessControl.FileSystemRights]::Write -and

      $access.FileSystemRights -ne [System.Security.AccessControl.FileSystemRights]::CreateFiles)))

{

                $logFolder = $env:userprofile

}

 

# Add the log file name to the path.

$logFileFullPath = Join-Path $logFolder "usersolutionupgrader-$date.txt"

 

# Open file

$fo = New-Object -com Scripting.FileSystemObject

$f = $fo.OpenTextFile($logFileFullPath, $ForAppending, $true)

 

if ($f -eq $null)

{

                $logFolder = $env:userprofile

                $logFileFullPath = Join-Path $logFolder "usersolutionupgrader-$date.txt"

                $f = $fo.OpenTextFile($logFileFullPath, $ForAppending, $true)

}

 

#Confirm log file on screen

Write-Host ("Log Path: " + $logFileFullPath)

 

#Write intro line

$f.WriteLine()

$f.WriteLine($intro)

 

function WriteLog

{

                $dt = Get-Date

                $logMsg = $dt.ToShortDateString() + "  " + $dt.ToShortTimeString() + "`t" + $args[0]

                $f.WriteLine($logMsg)

                Write-Output($logMsg)  #Turn this on when you need console output

}

 

function exitScript()

{

                if ($f -ne $null)

                {

                                $f.Close()

                }

                Write-Host "Exiting script due to error."

                exit

}

 

WriteLog ("Current user (admin):   $admin")

 

#solution details

$solFile = ""

$targetSolutionId = ""

$upgrade = $false

$myError = $null

 

$haveCurrentFeatures = $false

$haveNewFeatures  = $false

$numSites = 0

$oldFeatures = @{}

$newFeatures = @{}

$solSites = New-Object System.Collections.ArrayList

$solFailSites = New-Object System.Collections.ArrayList

 

#Parse the commandline parameters

if (($args -eq $null) -or ($args.Count -lt 2))

{

                WriteLog("Error: This script has been called without enough parameters. Listing your parameters below:")

                WriteLog($args)

                if ($f -ne $null)

                {

                                $f.Close()

                }

                exitScript

}

else

{

                $badParameters = $false

                foreach ($arg in $args)

                {

                                switch ($arg)

                                {

                                                "-upgrade"  {$upgrade = $true}

                                                "-path" {[void] $foreach.MoveNext(); $solFile = $foreach.Current}

                                                default {$badParameters = $true}

                                }

                }

 

                if ($badParameters -eq $true)

                {

                                WriteLog("You passed in a bad parameter.")

                                exitScript

                }                             

 

                #Validate parameters

                $extension = [IO.Path]::GetExtension($solFile)

                if (($extension -eq $null) -or ($extension -ne ".wsp") -or (!(Test-Path $solFile)))

                {

                                WriteLog("Error: The solution file name is not of WSP format or is an invalid file.")

                                exitScript

                }

 

                #Confirm parameter values captured

                $fileName = Split-Path $solFile -Leaf

                WriteLog("Solution Path is: `t" + $solFile)

                WriteLog("Solution Name is: `t" + $fileName)

                if ($upgrade)

                {

                                WriteLog "The tool will attempt to perform UPGRADE on the site collections"

                }

                WriteLog ""

}

 

#Get solution ID from given WSP

$tempPath = Join-Path $env:temp "upgrader" | Join-Path -ChildPath $fileName

$shell = New-Object -ComObject "Shell.Application" -ErrorAction:SilentlyContinue -ErrorVariable myError

if ($myError -ne $null)

{

                WriteLog("FAILED to create the Shell.Application object.")

                WriteLog("Error: " + $myError)

                $myError = $null

}

 

[IO.Directory]::CreateDirectory($tempPath)  | Out-Null

$tempFolder = $shell.NameSpace($tempPath)

$tempFolder.CopyHere($solFile)

 

#Take the file name ("yourfile.wsp") from the original path

$tempSolPath = Join-Path $tempPath $fileName

 

if (!(Test-Path $tempSolPath))

{

                WriteLog "Error: Failed to copy WSP file to temp location."

                exitScript

}

 

#Rename the WSP file to have CAB extension in order to facilitate CAB extraction

$cabFileName = [System.IO.Path]::GetFileNameWithoutExtension($fileName) + ".cab"

 

Rename-Item $tempSolPath $cabFileName

$cabPath = Join-Path $tempPath $cabFileName

 

$sourceWsp = $shell.NameSpace($cabPath).items()

$tempFolder.CopyHere($sourceWsp)

$manifestPath = Join-Path $tempPath "manifest.xml"

[xml]$manifest = Get-Content $manifestPath

$targetSolutionId = $manifest.Solution.SolutionId

 

#Validate Solution GUID

[Guid]$testGuid = "B80D56EC-5899-459d-83B4-1AE0BB8418E4"

if (($targetSolutionId -eq $null) -or ($targetSolutionId.Length -lt 36) -or

    ([System.ComponentModel.TypeDescriptor]::GetConverter($testGuid).ConvertFromString($targetSolutionId) -eq $null))

{

                WriteLog("Error: Target solution ID is invalid: " + $stringSolutionId)

                exitScript

}

 

WriteLog("Extracted solution ID: $targetSolutionId from manifest.xml")

WriteLog("")

 

#Now delete temp folder.

Remove-Item $tempPath\*

Remove-Item $tempPath

 

#Go through Content DBs

WriteLog ("Looking for Solution Id: " + $targetSolutionId + " in all Content Databases`n")

$dbs = Get-SPContentDatabase

 

foreach ($contentdb in $dbs)

{

                #Web App Level

                $webAppUrl = $contentdb.WebApplication.Url

 

                #Get WebApp

                $webApp = Get-SPWebApplication -Identity $webAppUrl

 

                $policy = $webApp.Policies[$admin]

                $policyAdded = $false

                $roleAdded = $false

 

                #If the admin doesn't have Full Control, it will be granted as follows:

                if ($policy -eq $null)

                {

                                $policy = $webApp.Policies.Add($admin, "") 

                                $webAppModified = $true

                                $policyAdded = $true

                                WriteLog "Added a policy entry for user '$admin'."

                }

 

                $fullRole = $webApp.PolicyRoles.GetSpecialRole([Microsoft.SharePoint.Administration.SPPolicyRoleType]::FullControl)

                if ($policy.PolicyRoleBindings[$fullRole] -eq $null)

                {

                                $policy.PolicyRoleBindings.Add($fullRole) 

                                $webAppModified = $true

                                $roleAdded = $true

                                WriteLog "Full Control added for '$admin' to Web Application '$webAppUrl'"

                }

 

                if ($webAppModified)

                {

                                $webApp.Update()

                                $webAppModified = $false

                }

 

                #Done. Have Full Control

                WriteLog ("Entering Web Application '$webAppUrl'.`n")

                Get-SPSite -WebApplication $webApp -Limit ALL | % {

                                $site = $_

                                $solution = $null

                                $foundSolution = $false

 

                                #Scan for solution here

                                Get-SPUserSolution -Site $_ | Where { $_.Status -eq [Microsoft.Sharepoint.SPUserSolutionStatus]::Activated -and $_.SolutionId -eq $targetSolutionId } | % {

                                                if ($foundSolution -eq $false)

                                                {

                                                                $foundSolution = $true

                                                                $solution = $_

 

                                                                if ($haveCurrentFeatures -eq $false)

                                                                {                             

                                                                                Get-SPFeature -Sandboxed -Site $site | Where { $_.SolutionId -eq $targetSolutionId } | % {$oldFeatures.Add($_.Id, $_)}

                                                                                $haveCurrentFeatures = $true

                                                                }

 

                                                                if ($upgrade -eq $false)

                                                                {             

                                                                                $solSites.Add($site.Url)  | Out-Null         

                                                                }

                                                                $solutionHash = $_.Signature

                                                                WriteLog ("Found site collection: " + $site.Url)

                                                }

                                }

                                $numSites ++

                               

                                #DoUpgrade here

                                if ($upgrade -and $foundSolution)

                                {

                                                $successAdd = $false

                                                WriteLog ("Uploading new solution file as: $fileName")

 

                                                #Add + Upgrade solution

                                                $myError = $null

                                                Add-SPUserSolution -LiteralPath $solFile -Site $site -ErrorAction:SilentlyContinue -ErrorVariable myError -Confirm:$false

                                                if ($myError -ne $null)

                                                {

                                                                WriteLog("Site collection '" + $site.Url + "' FAILED to upload the new solution.")

                                                                WriteLog("Error: " + $myError)

                                                                $myError = $null

                                                }

                                                else

                                                {

                                                                $successAdd = $true

                                                }

                                               

                                                $addedSolution = Get-SPUserSolution -Identity $fileName -Site $site

                                                if ($addedSolution -ne $null)

                                                {

                                                                WriteLog ("Found solution $fileName in the Solutions Gallery. Attempting to use it...")

 

                                                                #First check for already updated solution

                                                                if ($addedSolution.Signature -eq $solutionHash) 

                                                                {

                                                                                #This means we have the same version installed. Just skip it. And delete our copy!

                                                                                WriteLog ("New solution is already active on this site collection.")

               

                                                                                if ($successAdd -eq $true)

                                                                                {

                                                                                                #Remove the new solution (the dupe)

                                                                                                WriteLog ("Removing file: $fileName")

                                                                                                Remove-SPUserSolution -Identity $addedSolution -Site $site -Confirm:$false

                                                                                                if (!($solFailSites.Contains($site.Url)))

                                                                                                {

                                                                                                                $solFailSites.Add($site.Url) | Out-Null

                                                                                                }

                                                                                }

                                                                }

                                                                else

                                                                {

                                                                                #Perform upgrade

                                                                                Update-SPUserSolution -Identity $solution -Site $site -ToSolution $addedSolution -ErrorAction:SilentlyContinue -ErrorVariable myError -Confirm:$false

                                                                                if ($myError -ne $null)

                                                                                {

                                                                                                WriteLog("Site collection '" + $site.Url + "' FAILED to upgrade to the new solution.")

                                                                                                WriteLog("Error: " + $myError)

                                                                                                if (!($solFailSites.Contains($site.Url)))

                                                                                                {

                                                                                                                $solFailSites.Add($site.Url) | Out-Null

                                                                                                }

                                                                                                $myError = $null

                                                                                }

 

                                                                                if (!($solFailSites.Contains($site.Url)))

                                                                                {

                                                                                                #Upgrade succeeded

                                                                                                WriteLog("Site collection '" + $site.Url + "' has been upgraded to the new solution.")

                                                                                                WriteLog ""

                                                                                                $solSites.Add($site.Url)  | Out-Null

 

                                                                                                #Record results AFTER upgrade

                                                                                                if ($haveNewFeatures -eq $false)

                                                                                                {                             

                                                                                                                Get-SPFeature -Sandboxed -Site $site | Where { $_.SolutionId -eq $targetSolutionId } | %{$newFeatures.Add($_.Id, $_)}

                                                                                                                $haveNewFeatures = $true

                                                                                                }

                                                                                }

                                                                }

                                                }

                                                else

                                                {

                                                                if (!($solFailSites.Contains($site.Url)))

                                                                {

                                                                                $solFailSites.Add($site.Url) | Out-Null

                                                                }

                                                }

                                }

                                $site.Close();

                }             

 

                #Close permissions and webApp

                if ($roleAdded)

                {

                                $policy.PolicyRoleBindings.RemoveById($fullRole.Id)

                                $webAppModified = $true

                        WriteLog "Removed Full Control for '$admin' from Web Application '$webAppUrl'"

                }

                if ($policyAdded)

                {

                                $webApp.Policies.Remove($admin)

                                $webAppModified = $true

                                WriteLog "Removed the policy entry for user '$admin'."

                }

                if ($webAppModified)

                {

                                $webApp.Update()

                                $webAppModified = $false

                }

                WriteLog ""

                WriteLog "Done with Web Application."

                WriteLog ""

}

 

#Final tally of site collections

WriteLog("Analysis of site collection upgrades for solution ID $targetSolutionId ...")

WriteLog("We have processed a total of $numSites site collections.")

WriteLog("")

 

if ($upgrade)

{

                #Site Collection Summary

                if ($solSites.Count -eq 0)

                {

                                WriteLog("No site collections were upgraded. Refer to this log for any upgrade errors.")

                }

                else

                {

                                WriteLog("Listing site collections that have been upgraded:")

                                foreach ($siteUrl in $solSites)

                                {

                                                WriteLog($siteUrl)

                                }

                }

 

                if ($solFailSites.Count -ne 0)

                {

                                WriteLog("Listing site collections that FAILED to upgrade:")

                                foreach ($siteUrl in $solFailSites)

                                {

                                                WriteLog($siteUrl)

                                }

                }

 

                #Feature Upgrade Summary

                if ($newFeatures.Count -gt 0)

                {

                                WriteLog ""

                                WriteLog "Feature upgrade summary for the New User Solution:"

                                foreach($fKey in $newFeatures.Keys)  

                                {

                                                $fDef = $oldFeatures[$fKey]

                                                $fDef2 = $newFeatures[$fKey]

                               

                                                #Feature ID and DisplayName

                                                WriteLog("Feature ID: " + $fDef2.Id + "`t DisplayName: " + $fDef2.DisplayName)

 

                                                #Feature Version

                                                if ($fDef -eq $null)

                                                {

                                                                #New feature added.

                                                                WriteLog("This feature has been newly added.`t`t`t Version " + $fDef2.Version)

                                                }

                                                else

                                                {

                                                                if ($fDef.Version -eq $fDef2.Version)

                                                                {

                                                                                WriteLog("This feature has been unchanged.`t`t`t Version " + $fDef2.Version)

                                                                }

                                                                else

                                                                {

                                                                                WriteLog("Feature went from Version " + $fDef.Version + " to Version " + $fDef2.Version)

                                                                }

                                                }                             

                               

                                                WriteLog ""

                                }

                                WriteLog ("The new solution holds a total of " + $newFeatures.Count + " feature(s).")

                }

}

else

{

                if ($solSites.Count -eq 0)

                {

                                WriteLog("No site collections have been found.")

                }

                else

                {

                                WriteLog("We have found " + $solSites.Count + " site collections, as follows (no upgrade action performed):")

                                foreach ($siteUrl in $solSites)

                                {

                                                WriteLog($siteUrl)

                                }

                }

 

                WriteLog ""

                WriteLog "Feature summary for current User Solution:"

                foreach($fKey in $oldFeatures.Keys)

                {

                                $fDef = $oldFeatures[$fKey]

                                WriteLog ("Feature DisplayName: `t" + $fDef.DisplayName)

                                WriteLog ("Feature Version: `t" + $fDef.Version)

                                WriteLog ("Feature Id: `t`t" + $fDef.Id)

                }

 

                WriteLog ""

                WriteLog ("Found a total of " + $oldFeatures.Count + " feature(s).")

                WriteLog ""

}

WriteLog ""

 

#Close the file handle.

if ($f -ne $null)

{

                $f.Close()           

}

 

Installing KB938444

Wed, 2010-06-23 05:06

We’ve been tracking a small number of customers that have experienced issues after installing KB938444 through Windows Update. 

After the reboot at the end of installation we’ve had reports of Windows SharePoint Services sites and Central Administration being inaccessible with the error, “HTTP 404”, “Server Error: …” or “Cannot connect to the configuration database”.

This issue only affects Windows SharePoint Service v3 standalone installations that use the Windows Internal Database (wYukon) and does not affect SharePoint or user data. 

If after applying KB938444 you hit one of the errors described above you will need to run psconfig from an administrator command prompt as detailed below to complete the update.

psconfig -cmd upgrade -inplace b2b -wait –force

The Windows Small Business Server team have a blog post detailing this, and some other SBS specific steps, that relate to this issue here (By default SBS ships with WSS configured to use wYukon).

KB938444 is an important security update and we recommend installing it as soon as possible.

Live Chats to Learn more about SharePoint - with the MVP Experts

Fri, 2010-06-18 10:05

Do you have questions about SharePoint? Want to learn more about the recently launched SharePoint 2010?  By popular request, SharePoint MVPs from around the world are participating in a live chat event about SharePoint. These Q&A events are a great opportunity to tap into the vast knowledge of these industry professionals who are regarded as the best in their field. 

Please join us on Wednesday June 23rd at 9am PDT!

Learn more and add these chats to your calendar by visiting the MSDN event page http://msdn.microsoft.com/en-us/chats/default.aspx

 - Melissa Travers (Sr. MVP Lead, Community and Online Support)

Save the Date - SharePoint Conference 2011

Wed, 2010-06-09 04:37

Save the Date for SharePoint Conference 2011, the premier worldwide conference dedicated to SharePoint and related technologies being held October 3-6, 2011 in Anaheim, California.

 

SharePoint Conference 2011 will be the conference to learn more about Microsoft® SharePoint® 2010, the business collaboration platform for the enterprise and the internet. Learn how to apply the latest best practices for building and deploying solutions on the platform and find out how customers and partners are embracing cloud-based services to create value for their organizations.

 

Registration will open Spring 2011. Add yourself to the keep me notified list to stay up to date on all conference announcements at www.mssharepointconference.com.

 

We hope to see you in October 2011!

Microsoft SharePoint Conference 2011 Team | SPC@Microsoft.com  

 

Live from the BI Conference - June 8, 2010

Wed, 2010-06-09 00:31

At the BI Conference today, Ted Kummert demonstrated the new self-service user experiences that we’ve enabled in Office and SharePoint 2010 and SQL Server 2008R2.

One of the items he demonstrated was the new Microsoft Business Intelligence Indexing Connector (MSBIIC), which extends the capabilities of FAST Search Server for SharePoint 2010, with the ability to enable users to quickly and easily find the relevant Business Intelligence documents.

You can try this out for yourself by downloading the components here –

Microsoft Business Intelligence Indexing Connector - Backend

Microsoft Business Intelligence Indexing Connector – Frontend

And check out the keynote from TechEd here -> http://www.msteched.com/2010/NorthAmerica/Keynote02

In addition to discovering the documents, the MSBIIC will also crawl the data sources revealing items that are not necessary in the report itself but critical to the user’s discovery and as part of the refiners.  Now users can find the relevant information all within a single user experience, no matter the type of document.

 

For more information, check out the download page as well the post here ->http://blogs.msdn.com/b/sharepointbi/archive/2010/05/14/announcing-the-microsoft-business-intelligence-indexing-connector.aspx

 

 

Update to SharePoint Server 2010 for Internet Sites

Fri, 2010-06-04 02:07

If you installed SharePoint Server 2010 For Internet Sites - Enterprise using a license key obtained from the Volume Licensing Service Center or Microsoft Partner Network before May 25, 2010, you may encounter the following symptoms:

The following Enterprise features are not available, or the features have reduced functionality:

·         Access Services

·         InfoPath Forms Services

·         Chart Web Parts

·         Excel Services

·         PerformancePoint Services

·         Visio Services

NOTE:  this does not apply to any trial or evaluation versions of the product, and only applies to the specific version indicated above.

A new license key has since been provided for use with SharePoint Server 2010 For Internet Sites – Enterprise.  To resolve this issue, you must uninstall SharePoint Server 2010 For Internet Sites from each server. Then, obtain the new SharePoint Server 2010 for Internet Sites – Enterprise key to reinstall SharePoint Server 2010 For Internet Sites on each server.  Please note that to ensure proper functioning of the product, you must reinstall with the proper key if you are in this state, regardless of if you are seeing any specific symptoms listed above.  Before doing so, it is recommended that you take a backup of your current environment to be certain that you have a safe copy of your data.  The article linked at the bottom of this post has more information and references to relevant TechNet documentation.

The KB article below includes more information, including references to relevant TechNet documentation and steps to verify that you are running in this state:

The version of SharePoint Server 2010 for Internet Sites that is downloaded and installed before May 25, 2010 does not have all product features enabled, or it runs with reduced functionality
http://support.microsoft.com/kb/2143810

 

 

 

SharePoint 2010 – Top 10 Resources to get you started…

Fri, 2010-05-21 23:29

With the official launch of SharePoint 2010 last week, we thought now would be a perfect time for us to share some resources to help you to get started evaluating and learning about the new release. 

This post contains links to download evaluation software, guides, demo virtual machines and lots more, for both Developers and IT Professionals.

 

1. Check out the Office 2010 & SharePoint 2010 Launch Keynote and on-demand sessions, and the SharePoint 2010 Product Site on Microsoft.com

2. Download the SharePoint 2010 Overview Evaluation Guide, the SharePoint 2010 Professional Developer Evaluation Guide and the SharePoint 2010 IT Professionals Evaluation Guide to quickly ramp up on platform updates and additions.

3. Check out the learning plans for IT Professionals, Developers and End Users and get started on your SharePoint 2010 learning plan.

4. Download the pre-configured Hyper-V SharePoint 2010 Evaluation and Demo Virtual Machine (~1.8GB) along with the SharePoint 2010 Walkthrough Guide for a chance to get hands on with SharePoint 2010 with zero set up and configuration.

5. Download 180 day trial versions of;  SharePoint Server 2010, FAST Search Server 2010 for SharePoint, Office Professional Plus 2010, Windows Server 2008 R2, SQL Server 2008 R2 to install and evaluate SharePoint 2010 yourself, and while you’re downloading stuff here’s some links to the full versions of; SharePoint Foundation 2010, Search Server Express 2010, SharePoint Designer 2010

6. Watch the Getting Started with SharePoint 2010 for IT Professionals video series and the Getting Started with SharePoint 2010 for Professional Developers video series to get bite-sized video overviews of some of new and updated features.

7. Do the self paced IT Professional hosted virtual hands-on-labs and Developer hosted virtual hands-on-labs to get hands-on with SharePoint 2010 through a series of scripted tutorials, and if you want more, then download and install 10 getting started Developer Hands-on-labs.

8. Discover what’s new for end users with Getting started with SharePoint 2010 guides and Take SharePoint Server 2010 training at your desk.

9. Visit the TechNet and MSDN SharePoint 2010 sites for a wealth of technical reference documentation and prescriptive guidance through our categorized resource centers, such as the Installation and Deployment Resource Center to learn how to plan, install and configure SharePoint 2010 and the Upgrade and Migration Resource Center for the latest guidance and best practices for upgrading to SharePoint 2010.

10. Got questions?  Search for an answer, or ask the community in the official Microsoft SharePoint 2010 Forums.

 

Already a SharePoint 2007 expert?

Check out the free advanced training content for IT Professionals and Developers looking to upgrade their skills from SharePoint Server 2007 to SharePoint 2010.

We’ve got 36 modules of self paced IT Professional Advanced Training and Developer Advanced Training that includes audio and video recordings.  We’ll also be adding 24 hosted virtual hands-on-labs in the very near future to accompany the training content – All for FREE and on demand.

Want to get certified on SharePoint 2010?

Take a look at the Microsoft Learning SharePoint 2010 Training Portal for information and expected availability dates for SharePoint 2010 Certification, Classroom training, E-Learning, MS Press books and Learning Snacks.

Live Chats to Learn more about SharePoint

Thu, 2010-05-20 23:18

Do you have questions about SharePoint? Want to learn more about the recently launched SharePoint 2010?  By popular request, 28 SharePoint MVPs from around the world are participating in two live chat events about SharePoint. These events are a great opportunity to tap into the vast knowledge of these industry professionals who are regarded as the best in their field. Two opportunities are available to join the conversation. Times were chose to accommodate most of the world.

On Tuesday May 25th tune in between 4:00 PM – 5:00 PM Pacific time, and on Wednesday May 26 tune in between 9:00 AM – 10:00 AM Pacific time to chat with SharePoint MVPs.

Learn more and add these chats to your calendar by visiting the MSDN event page http://msdn.microsoft.com/en-us/chats/default.aspx

Language Offerings for SharePoint 2010 Products

Fri, 2010-05-14 01:03

Multilingual support is key to the deployment success of many of our global customers. This post shares our plans for language coverage for SharePoint 2010 and estimated release timeframes. To date we have shipped 19 languages, including English, Japanese, French, Russian, German, Spanish, Chinese Simplified, Chinese Traditional, Arabic, Korean, Hebrew, Hindi, Danish, Thai, Swedish, Polish, Portuguese (Brazil), Dutch and Italian with 21 others shipping between now and September 2010.

The following table applies to SharePoint Foundation 2010, SharePoint Server 2010, Office Web Apps, Project Server 2010, Search Server 2010 and Search Server 2010 Express. The Estimated Release Timeframe is RTM date, which may be earlier than the date when it hit public download.

Note: Fast Search Server for SharePoint 2010 uses the language infrastructure of SharePoint Server 2010, so there is no separate language pack or localized version for it.

[ll: Language code. CC: Country Code. SKU: Stock Keeping Unit (The full release of the product). LP: Language Pack]

Language ll-CC Release Type Estimated Release Timeframe Arabic*** ar-sa SKU and LP Released Basque** eu-es LP September Bulgarian* bg-bg LP August Catalan** ca-es LP July Chinese (Simplified) zh-cn SKU and LP Released Chinese (Traditional) zh-tw SKU and LP Released Croatian* hr-hr LP August Czech cs-cz SKU and LP June Danish da-dk SKU and LP Released Dutch nl-nl SKU and LP Released English en-us SKU and LP Released Estonian* et-ee LP August Finnish fi-fi SKU and LP May French fr-fr SKU and LP Released Galician** gl-es LP September German de-de SKU and LP Released Greek el-gr SKU and LP July Hebrew*** he-il SKU and LP Released Hindi* hi-in SKU and LP Released Hungarian hu-hu SKU and LP June Italian it-it SKU and LP Released Japanese ja-jp SKU and LP Released Kazakh* kk-kz LP August Korean ko-kr SKU and LP Released Latvian* lv-lv LP August Lithuanian* lt-lt LP August Norwegian Bokmål nb-no SKU and LP May Polish pl-pl SKU and LP Released Portuguese (Brazil) pt-br SKU and LP Released Portuguese (Portugal) pt-pt SKU and LP May Romanian* ro-ro LP July Russian ru-ru SKU and LP Released Serbian Latin* sr-latn-cs LP August Slovak sk-sk LP July Slovenian sl-si LP July Spanish es-es SKU and LP Released Swedish sv-se SKU and LP Released Thai* th-th SKU and LP Released Turkish tr-tr SKU and LP July Ukrainian uk-ua LP June

*     Project Server is not localized in these languages.

**   Access Services, PerformancePoint Services and Project Server and not localized in these languages.

***  No support for bidirectional languages in PerformancePoint Services.

Download Language packs

2010 Server Language Packs for SharePoint Server 2010, Project Server 2010, Search Server 2010, and Office Web Apps 2010

Language Packs for SharePoint Foundation 2010

 

For more information on deploy language packs, please refer to

Deploy language packs (SharePoint Server 2010)

http://technet.microsoft.com/en-us/library/cc262108(office.14).aspx

Deploy language packs (SharePoint Foundation 2010)

http://technet.microsoft.com/en-us/library/cc288518(office.14).aspx

 

Jie Li

Technical Product Manager, SharePoint

Virtual launch event today

Wed, 2010-05-12 23:50

Join the live virtual launch event for Office and SharePoint today at www.the2010event.com!

Executive Thoughts on SharePoint 2010

Wed, 2010-05-12 02:14

Check out SharePoint GM Eric Swift’s thoughts on SharePoint 2010 in this new executive video blog!  Go to www.the2010event.com to participate in the virtual launch event tomorrow, and www.microsoft.com/sharepoint to get more information.  Follow us on twitter @sharepoint and use hashtags #join2010 and #sharepoint.  Become a fan at www.facebook.com/mssharepoint and ask questions at http://mssharepointforums.com

Plan Your Server Farm with Capacity Management Resource Center for SharePoint 2010

Fri, 2010-05-07 01:50

The release of SharePoint 2010 Products marks a substantial change in the way Microsoft approaches capacity and performance documentation. We have listened to feedback and learned from customer experiences with SharePoint Server 2007 and our own testing to establish a comprehensive set of initial guidance for capacity and performance management for SharePoint 2010.

We have published a Capacity Management Resource Center (http://technet.microsoft.com/en-us/sharepoint/ff601870.aspx ) that will help you find the content you need. You can start with the Capacity Management Sizing Overview (http://technet.microsoft.com/library/cc261700(Office.14).aspx ) to help you get started with capacity management concepts and the 5 steps to properly size, design, deploy, monitor, and maintain your environment. Other content available now includes SharePoint Server 2010 boundaries and limits (http://technet.microsoft.com/library/cc262787(Office.14).aspx ), Storage and SQL Server capacity planning (http://technet.microsoft.com/library/cc298801(office.14).aspx ), technical case studies of production SharePoint Server 2010 environments, and recommendations for specific features and services. More content will be added in the coming weeks and months, so make sure to check back often for new white papers and articles.