Monday, July 04, 2011

I use SharePoint

Released last week: I Use SharePoint

A lot of information (howto's, Quick Reference Cards, etc) on how to use SharePoint!

Wednesday, June 29, 2011

[SP2010] Service Pack 1 released

Yesterday Microsoft released Service Pack 1 for SharePoint 2010!

More info on: SharePoint Team Blog

Wednesday, June 08, 2011

Two very good SharePoint articles

Yesterday I ran into two very good SharePoint articles, that describe an often forgotten part of a SharePoint implementation: Governance!

Tuesday, June 07, 2011

[SP2007/SP2010] Migrate SharePoint across domains

A while ago I worked on a project where we had to migrate a customer’s SharePoint 2007 environment from another service provider to a newly created environment in our own datacenter. The challenge we had during this project was that the new environment was built from scratch, meaning that the Active Directory would be a different one than the original environment was located in. Unfortunately there were no possibilities to create a trust between the two domains.

The above would mean that since the Active Directory changed, , the domain name would change as well as all user accounts (or SIDs). This meant that all security permissions, alerts and ownerships would become unusable. These had to be migrated to the new accounts in the new AD.

For migrating users, SharePoint offers a stsadm operation called “migrateuser”. However, at the time of the project there was no operation for groups migration, so we needed a solution for that as well.

[PROJECT INFO]
  • The web application URL's would not change
  • The user account format would not change in the new Active Directory. User1 in the old AD, would be User1 in the new AD.
  • MIIS was used to create the users in the source environment. ILM2007 would be used in the new environment. Any custom code used in MIIS could be migrated to the ILM2007 environment, however some changes and updates would be made in the process.
  • The old environment was based on 32 bit SharePoint 2007 on Windows Server 2003. The new environment would be based on 64 bit SharePoint 2007 on Windows Server 2008.
[ISSUES]
  • The source SharePoint environment contained a SSP. Unfortunately there is no way to copy the SSP or its settings to the new environment automatically. The SSP had to be recreated manually.
  • The user profiles in the SSP had to be migrated as well. There was no tool available that was able to export the user profiles and import in our new environment. We had to create a tool for this. On Codeplex we found a Profile Import tool (MOSS Profile Importer), but that was unable to export the information from an existing SharePoint farm. We used this code as a starting point for our own tool.
  • The migrategroup command did not exist yet, fortunately only seven different AD groups were used. These needed to be migrated manually.
  • The stsadm operation migrateuser has to be run for each user id. A custom solution is required to generate a script for all users. Running this script consumes much time and needs to be shortened as much as possible.
[MIGRATION]
The preparation steps we took were:
  • Create the custom tooling require to perform the migration (profile export/import, migrateuser script)
  • Perform a test migration in order to validate the migration steps and target environments.
The steps we took to migrate the content were:
Environment setup
  • Setup the new SharePoint 2007 environment and use same patch level as the original farm
  • Install all custom solutions on the target environment
  • Create all users in the new Active Directory
  • Setup the SSP in the target environment and configure it according to the settings of the old environment (user profile properties, profile import, audiences, search, etc)
User profile information
  • Import all users from AD into the SSP
  • Backup all user profile information to file
  • The import tool is using the user id to import the data to the correct profile, so we had to replace the old domain name with the new domain name in the export file
  • Restore all user profile information into the new SSP
Content
  • Create SQL backup of the source content databases (web applications and MySites) to a USB disk
  • Ship the disk to the other datacenter and connect it to the server
  • Restore the SQL backups on the target SQL server from USB disk
  • Connect the content databases to the correct web applications
  • Test the site collections for correct operation of the databases
  • Run the migrateuser script generation tool. This tool created three script files, which we could run on three different servers to speed up the migration process.
  • Run the migration scripts
  • Manually change group membership for each used group (add new group, grant permissions and remove old group) in the entire site structure
Testing
  • Test, test, test
[POST INFO]
  • Since the August 2009 Cumulative Update, SharePoint 2007 stsadm includes the migrategroup operation, which is able to migrate groups the same way migrateuser does for users.

Monday, April 04, 2011

[MOSS2007/WSSv3] PowerShell Library - List where a feature is activated

[DESCRIPTION]
Microsoft recommends to deactivate a feature everywhere before you remove the feature from the environment. Unfortunately there is no way of determining where the feature is activated.

To solve this issue, I have created a PowerShell script.

How to use it:
  1. Download the PowerShell script
  2. Open the script in Notepad and edit the <featureid> text to match the id of the feature you are interested in
  3. Run the script
  4. Open the output in Microsoft Excel and use "*" as separator
  5. Based on the Scope column you can determine if the specific feature is a site or web feature

Thursday, March 31, 2011

[SP2010] SharePoint Timer service crashes constantly

[SYMPTOMS]
I tried to retract a solution, but the status remained "Retracting" and never changed. After some investigation I found out that the SharePoint Timer service on one of the servers crashed every couple of minutes. The event log showed the following errors:

Log Name: System
Source: Service Control Manager
Date: 3/31/2011 9:24:55 AM
Event ID: 7024
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: [Server name]
Description:
The SharePoint 2010 Timer service terminated with service-specific error %%-2147467259.
and

Log Name: System
Source: Service Control Manager
Date: 3/31/2011 9:24:55 AM
Event ID: 7031
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: [Server name]
Description:
The SharePoint 2010 Timer service terminated unexpectedly. It has done this 3 time(s). The following corrective action will be taken in 30000 milliseconds: Restart the service.
The ULS log showed the following errors:
- The timer service could not initialize its configuration, please check the configuration database. Will retry later.

- Exiting the process because the timer could not be initialized after multiple attempts.
- The timer service is stopping
[CAUSE]
After searching the Internet I found one article where someone explained that this was caused by the fact that the Configuration Cache directory (C:\ProgramData\Microsoft\SharePoint\Config) did not contain a folder with the farm GUID as the name. After checking the configuration cache folder, that folder was indeed missing.

I then remembered I had to clear the configuration cache last week because the implementation of the February 2011 Cumulative Update failed during the Configuration Wizard step. Clearing the configuration cache fixed this issue. As it turned out, I was a little too enthousiastic with deleting the folders :-)

[Resolution]
  1. Open the Registry Editor
  2. Browse to HKLM > SOFTWARE > Microsoft > Shared Tools > Web Server Extensions > 14.0 > Secure > ConfigDB
  3. Copy the value in the property "Id"
  4. Browse to folder C:\ProgramData\Microsoft\SharePoint\Config and create a folder with the name of the previously copied value
  5. Restart the SharePoint Timer service
  6. The folder should be populated with XML files within a minute.

Friday, February 25, 2011

The “Soft” part of SharePoint - Part 6, Challenge the Business

This is a tricky one! I know the saying "the customer is always right" or "the customer is king". In IT the business is your customer, IT by itself is useless. IT is there to support the business to work as efficient as possible, but does this mean that the customer is indeed always right.......

I have seen many cases where IT puts the business before everything. They do pretty much everything to do what the business asks them to do, often without questions. Very often this resulted in projects turning into disasters:
  • The business asks for more that they need
  • They radically change their requirements when you just started the implementation
And of course, afterwards the business starts complaining that it took too long and the costs were too high.

Then what is causing these kind of issues. Two reasons behind these drama’s are:
  1. The business doesn’t know what exactly they want.
    • Result 1: They ask something else every day
    • Result 2: They ask what they think they want
  2. The business is asking for IT solutions instead of specifying the business need
    • Result: They ask for a technical solution which is not fitting their business need
That is why IT should challenge everything the business is asking for: Do they have a clear picture what they want? Do they really want what they ask? Don't they mean something else and therefore ask the wrong question? Isn’t there an easier way to meet their business need?

This is not to question everything they do, but to get to know the true question behind the question. When all requirements are clear on all ends, projects can be executed easier and cheaper.

Friday, January 28, 2011

[MOSS2007/WSSv3] PowerShell Library - Check for large lists

[DESCRIPTION]
Microsoft recommends not to use lists/libraries with a huge amount of items, so called large lists. These lists can seriously impact the performance of SharePoint. Unfortunately there is no way to keep track of such large lists from an administrative side.

In order to be able to determine where large lists exist, I have created a PowerShell script.

How to use it:
  1. Download the PowerShell script
  2. Open it in a text editor like Notepad
  3. Run the script
  4. Open the output in Microsoft Excel and use "*" as separator

Tuesday, January 25, 2011

[MOSS2007/WSSv3] PowerShell Library - Overview Request Access Email Address

When creating a site collection or sub sites, it is possible to configure an e-mail address to which SharePoint will send Access Requests mails. When a mail address of a user is configured and that user leaves or changes roles, by default there is no way of checking where that address is used.

To solve this, I have created a script that generates a report with all configured mail addresses:

How to use it:
  1. Download the PowerShell script
  2. Run the script
  3. Open the output in Microsoft Excel and use "*" as separator

Monday, January 24, 2011

The “Soft” part of SharePoint - Part 5, Change Management

This time something that is not really SharePoint related, but this doesn’t make it less important!

Way too many times I have seen “Administrators from the Wild West”, in other words true cowboys. Clicking links and buttons like their lives depended on it. Reading error messages is so 2010 :-)

When troubleshooting an issue, Google is my friend. However not all answers given on the Internet always work or are safe to the environment. What if something goes wrong and I bring down the environment……..in a lot of cases all hell will break loose and I have to test my running skills :-p

How to prevent this?
Every change you are about to implement to a production environment is supposed to be tested before implementation. If you are working as an administrator (server or application), I hope you are familiar with ITIL* and its procedures, especially change management. If not, see the “More info” section and read up real quick!!

In a lot of cases Change Management is seen as a pain in the butt. But when implemented correctly it can save you a lot of work or better yet save you from having to do some overtime. The goal of change management is to make you think well about the change you are going to implement and put those steps on paper:
  • What are you trying to fix/resolve/accomplish?
  • What changes are you going to make?
  • What are the steps to implement the change?
  • What are the components that are affected?
  • What is the impact of the change for users and administrators?
  • Who needs to be notified about the change?
  • What to do if something goes wrong?
  • What to document afterwards?
  • Etc, etc
But that is not all: Two know more than one. Change management is also about having the thought process reviewed by others. These persons can have the same type of skills, but it is also important to have it reviewed by persons with different skills. Maybe your change has impact on their area of expertise you didn’t think of.

Change Management and DTAP
In combination with a DTAP strategy, Change Management can become even more powerful. All changes are tested on the Test environment, the implementation procedure tested on the Acceptance environment, after which the change is implemented on the Production environment.

More info:
ITIL: http://en.wikipedia.org/wiki/Information_Technology_Infrastructure_Library
Change Management: http://en.wikipedia.org/wiki/Change_Management_(ITSM)