Author Archives: Usman Afzal

About Usman Afzal

Usman afzal, Microsoft Certified technology specialist in SharePoint server 2010, ASP.net Web Applications and SharePoint Server 2007; focusing on Microsoft Products.

Tour of user interfaces of SharePoint 2013 by Asif Rahmani

So, here is another free Webinar from Share-Point Videos.Com. Space is limited as always so register here

Reserve your Webinar seat now at:

https://www1.gotomeeting.com/register/981957809

Description and Agenda (As received)

Presenter:
Asif Rehmani – http://www.sharepoint-videos.com/about/

SharePoint MVP and Microsoft Certified Trainer

Audience: All SharePoint users familiar with SharePoint 2010 or SharePoint 2007

Session Abstract:

SharePoint 2013 brings with it a bold new look compared to the earlier versions. Want to know what has changed exactly? Attend this session! The ‘Metro’ look of sites, the introduction of ‘Apps’, an easier way to manage your documents, the radical new way to style your site and more are all discussed in this session.

This webinar is sponsored by http://www.SharePoint-Videos.com. During and after the webinar, we’ll take your questions and try to answer them to the best of our ability.

Prerequisites:
None

Date:  Wednesday, September 12, 2012
Time:  2:00 PM – 3:15 PM EST

Thanks to Share-Point Videos.Com

Webinar on Effectively manage enterprise projects with Project Server 2010

So, here is another free Webinar from Share-Point Videos.Com. Space is limited as always so register here

Reserve your Webinar seat now at:
https://www1.gotomeeting.com/register/709521273

Description and Agenda (As received)

Presenter:
Dux Raymond Sy – SharePoint MVP, PMP – http://www.meetdux.com

Audience: Project teams, managers, decision makers

Session Abstract:

In today’s project-centric work environment, the ability to coordinate multiple projects with distributed teams, and making high-level strategic decisions based upon consolidated project progress, risk and resource usage information is critical. Microsoft Project Server 2010 is an enterprise-wide project management platform designed to meet these challenges.

In this session, you learn to optimize Project Server to manage enterprise projects. You’ll also learn how to:

  • Build an Enterprise Project Management (EPM) solution based on Microsoft Project Server
  • Create a portfolio of projects using new and existing project plans
  • Manage and optimize project resources across the enterprise
  • Collaborate with geographically distributed project team members using Project Web Access
  • Identify and assign responsibility for project risks and issues
  • Monitor and analyze performance of enterprise projects and portfolios
  • Leverage SharePoint 2010 collaboration tools

This webinar is sponsored by SharePoint-Videos.com. During and after the webinar, we’ll take your questions and try to answer them to the best of our ability.

Pre-requisites:
Fundamental knowledge and experience of Project Management and familiarity with Windows, Microsoft Office and SharePoint is assumed.

Date:  Monday, November 14, 2011
Time:  2:00 PM – 3:15 PM EDT

Thanks to Share-Point Videos.Com

Elevating PowerShell Script Execution Permissions

Hi, This blog entry is one of first of the series on PowerShell Scripts. You will find in this blog how can you run the PowerShell Scripts from your PowerShell Command Prompt on Windows 7 or Windows server 2008 and above.

The script execution is by default is disabled by Microsoft to protect the environment against malicious scripts, but you can run the scripts from your trusted sources by elevating and enabling the scripts execution policy.

image

*Sorry for a bad quality picture here, please try opening the picture in new window to see the parts.

If you follow the snap shot as above and Run the power shell as an administrator you will get the following shell. Try checking the Execution Policy on your computer by running the following command

Get-ExcecutionPolicy

SNAGHTML589113b

In this case you are not allowed to run scripts on your machine and you will get the following error while executing any script

SNAGHTML6056631

Now this is the time to set the execution policy to the one you required to run the scripts. You have different options here as follows

Restricted – This is the default execution policy on installation. When this policy is in effect, script execution is disabled.

AllSigned – When the execution policy is AllSigned, scripts can be executed, but they must be Authenticode-signed before they will run.

RemoteSigned – RemoteSigned requires that all scripts that are downloaded from a remote location must be Authenticode-signed before they can be executed.

Unrestricted – When the execution policy is unrestricted, PowerShell will run any script. It will still prompt the user when it encounters a script that has been downloaded however, this is the least secure setting.

In Our case we are going to use RemoteSigned option and we will run the following command

Set-ExecutionPolicy RemoteSigned –Force

SNAGHTML6074aa5 

Now if we Run the same Script as before we will be able to do that as follows

image 

In the screen above the script just open a Balloon in the System tray. I will be sharing the script in my next post.

So, after performing the above steps now you can run the scripts in your power shell and exploit the feature of this excellent creation

Information on this Post is helpful, Please don’t forget to rate or comment.

Visit us on http://www.bytebeats.com

Webinar on 10/19/2011 at 2pm Eastern – Using SharePoint Designer in the ‘Real World’

This is a good opportunity to get free webinar by someone like Asif Rehmani. Following is the detail of the event as received.

See more at http://bytebeats.com/2011/10/19/webinar-on-10192011-at-2pm-eastern-using-sharepoint-designer-in-the-real-world/

SharePoint Automation – Power Shell Scripts

Hi,

How often I think about PowerShell Scripts while working on SharePoint 2007 and deploying solutions using Stsadm. Though, it worked well for me, but never got control as promissed by the powershell scripts.

Recently, I got chance to start working and ext exploring my experiences with PowerShell Scripts for deployment of SharePoint 2010 solution and doing a lot with Microsoft .Net object model siting outside Visual Studio and working in colorful Power Shell Snap In 🙂

Today, I’m gonna share a piece of work that we (SharePoint developers) needs to deal with almost in every SharePoint project, and that’s the deployment of SharePoint Solutions. You may find the contents of this post on google, but I tried to keep things simple and planned.

First of all, for those who are new to Power Shall, you may be wondering about the Commands that you can use with power shell. I use a better way to keep them with me, try the following command in Power Shell to dump all available SharePoint commands in a text file.

Get-Command -module Microsoft.SharePoint.PowerShell > textfilename.txt

Once You have all the commands, its easy for you to go and explore commands based on your requirements, I would say the Get-help is really helpful here 🙂

Now let’s play with Power shell and deploy our Solution files for the SharePoint Farm.

Lets take the case where we have some solution files, and we want to write a script that will Add and deploy solution files to specified Farm or Web.
To make it clean and dynamic I use a xml Configuration file for deployment.

<ProjectName>
<Solutions>
<Solution Name=”Usman.SP.Projects.Utilities.wsp” Path=”C:\Users\afzalu\PS_Scripts\Installer\Usman.SP.Projects.Utilities.wsp” CASPolicies=”false” GACDeployment=”true”>    </Solution>
<Solution Name=”Usman.SP.Projects.Branding.wsp” Path=”C:\Users\afzalu\PS_Scripts\Installer\Usman.SP.Projects.Branding.wsp” CASPolicies=”false” GACDeployment=”true”>    </Solution>
<Solution Name=”Usman.SP.Projects.Core.wsp” Path=”C:\Users\afzalu\PS_Scripts\Installer\Usman.SP.Projects.Core.wsp” CASPolicies=”false” GACDeployment=”true”>    </Solution>
<Solution Name=”Usman.SP.Projects.Pages.wsp” Path=”C:\Users\afzalu\PS_Scripts\Installer\Usman.SP.Projects.Pages.wsp” CASPolicies=”false” GACDeployment=”true”>    </Solution>
<Solution Name=”Usman.SP.Projects.RequestHandling.wsp” Path=”C:\Users\afzalu\PS_Scripts\Installer\Usman.SP.Projects.RequestHandling.wsp” CASPolicies=”false” GACDeployment=”true”>    </Solution>
<Solution Name=”Usman.SP.Projects.WebStructure.wsp” Path=”C:\Users\afzalu\PS_Scripts\Installer\Usman.SP.Projects.WebStructure.wsp” CASPolicies=”false” GACDeployment=”true”>    </Solution>
<Solution Name=”Usman.SP.Projects.Presentation.wsp” Path=”C:\Users\afzalu\PS_Scripts\Installer\Usman.SP.Projects.Presentation.wsp” CASPolicies=”false” GACDeployment=”true”>
<WebApplications>
</WebApplications>
</Solution>
<Solution Name=”Usman.SP.Projects.Sites.wsp” Path=”C:\Users\afzalu\PS_Scripts\Installer\Usman.SP.Projects.Sites.wsp” CASPolicies=”false” GACDeployment=”true”>
<WebApplications>
</WebApplications>
<Solution>
</Solutions>

</ProjectName>

For Now, I just take an example where I need to deploy the solution, but ofcourse with this design you can also do feature activation and other webapplication chnages (we will do that in some other post).

Now let’s see how easily we can add a Power Shell Script to add these solution to specific WebApplication or Farm

# add SharePoint Powershell snapin
add-PSSnapin Microsoft.Sharepoint.powershell
write-host “———————————————————-” -foregroundcolor Green
write-host “Deploying Soultions” -foregroundcolor Green

if($args){

# Getting web.Config File

$configFile = $args[0];

if ([string]::IsNullOrEmpty($configFile)) { return }

[xml]$solutionsConfig = Get-Content $configFile

if ($solutionsConfig -eq $null) { return }

$solutionsConfig.DLW.Solutions.Solution | ForEach-Object{
[string]$path = $_.Path
[bool]$gac = [bool]::Parse($_.GACDeployment)
[bool]$cas = [bool]::Parse($_.CASPolicies)
$webApps = $_.WebApplications.WebApplication

#Add the solution

$spAdminServiceName = “SPAdminV4”
[string]$name = Split-Path -Path $path -Leaf
$solution = Get-SPSolution $name -ErrorAction SilentlyContinue
Write-Host “Adding solution $name…”
$solution = Add-SPSolution $path

#Deploy the solution

if (!$solution.ContainsWebApplicationResource) {
Write-Host “Deploying solution $name to the Farm…”
$solution | Install-SPSolution -GACDeployment:$gac -CASPolicies:$cas -Confirm:$false
}
else {
if ($webApps -eq $null -or $webApps.Length -eq 0) {
Write-Warning “The solution $name contains web application resources but no web applications were specified to deploy to.”
return
}
$webApps | ForEach-Object {
Write-Host “Deploying solution $name to $_…”
$solution | Install-SPSolution -GACDeployment:$gac -CASPolicies:$cas -WebApplication $_ -Confirm:$false
}
}
# Restarting the Service
Stop-Service -Name $spAdminServiceName
Start-SPAdminJob -Verbose
Start-Service -Name $spAdminServiceName

#Block until we’re sure the solution is deployed.

do { Start-Sleep 2 } while (!((Get-SPSolution $name).Deployed))
} #End of $solutionsConfig.Solutions.Solution | ForEach-Object
}
write-host “Solutions Deployed Successfully” -foregroundcolor Green

write-host “———————————————————–” -foregroundcolor Green

Sorry for Formating, but it takes too much time so I prefer sharing things rather than spending lots of time on formating.
Once you run the above code you will see a very informative Power Shell Window, that will show you all the deployment setps in a friendly way so your deployement team can really enjoy the deployment.
You can use the below code to uninstall and delete the solution files using the same XML file

# add SharePoint Powershell snapin

add-PSSnapin Microsoft.Sharepoint.powershell

write-host “———————————————————-” -foregroundcolor Green

write-host “Deleting Soultions” -foregroundcolor Green

if($args){

# Getting web.Config File

$configFile = $args[0];

if ([string]::IsNullOrEmpty($configFile)) { return }

[xml]$solutionsConfig = Get-Content $configFile

if ($solutionsConfig -eq $null) { return }

$solutionsConfig.DLW.Solutions.Solution | ForEach-Object{

[string]$name = $_.Name

$spAdminServiceName = “SPAdminV4”

$solution = Get-SPSolution $name

# Un-Install Solutions

if($solution.Deployed){

if (!$solution.ContainsWebApplicationResource) {

Write-Host “Un-Installing solution $name from the Farm…”

$solution | UnInstall-SPSolution -Confirm:$false

}

else{

Write-Host “Un-Installing solution $name …”

$solution | UnInstall-SPSolution -AllWebApplications:$true -Confirm:$false

}

Stop-Service -Name $spAdminServiceName

Start-SPAdminJob -Verbose

Start-Service -Name $spAdminServiceName

#Block until we’re sure the solution is deployed.

do { Start-Sleep 2 } while (((Get-SPSolution $name).Deployed))

}

} #End of $solutionsConfig.Solutions.Solution | ForEach-Object

# Remove Solutions

$solutionsConfig.DLW.Solutions.Solution | ForEach-Object{

if(!$solution.Deployed){

[string]$name = $_.Name

Write-Host “Getting uninstall solution $name…” -foregroundcolor YELLOW

$unInstallSolution = Get-SPSolution $name

$unInstallSolution | Remove-SPSolution -Confirm:$false

Write-Host “Solutoin $name… Removed” -foregroundcolor YELLOW

}

}

}

write-host “Solutions Deleted Successfully” -foregroundcolor Green

write-host “———————————————————–” -foregroundcolor Green

Activate Site Directory Site Template in SharePoint 2010

If you are wondering about the “Site Directory Sit Template” in SharePoint 2010, then follow this blog post to use this feature onto your Share Point Server.

Actually, this feature is made Hidden by Intentionality for upgrade purpose from Share Point Server 2003 to 2010, and you need to make this feature visible and than activate for your specific web site.

Follow these steps to get rid of Hidden Directory Site Template Feature.

1. Open C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\1033\XML

2. Open webtempsps.xml for Eidt

3. Find section for “Site Directory” and change Hidden value

<Configuration ID="0" Title=”Site Directory” Type=”0″ Hidden=”FALSE” ImageUrl=”/_layouts/1033/images/template_site_dir.png” Description=”A site for listing and categorizing important sites in your organization. It includes different views for categorized sites, top sites, and a site map.” DisplayCategory=”Enterprise” VisibilityFeatureDependency=”5F3B0127-2F1D-4cfd-8DD2-85AD1FB00BFC”>

4. After that open command prompt and browse to
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN

5. Activate the feature ” SharePoint Server Publishing Infrastructure” onto your site (if not activated earlier)

6. Run following commaned:
stsadm.exe -o activatefeature -id 5F3B0127-2F1D-4cfd-8DD2-85AD1FB00BFC –url http://yoursite

After these steps, go to your site and Create a new site using Site Directory Site Template, it is there now :-).

Useful Information, Rate It.

Authentication and Autherization in SharePoint 2007/2010: A Food for thought

Authentication and Authorization in Share Point

Authentication is process of challenging and approving user’s Identity, while Authorization comes after the authentication, where user based permissions, rights, and privileges are taken into account. Microsoft SharePoint Services 3.0, MOSS, and SharePoint Foundation supports security for user access at the Web site, list, library folder, and item levels2. This security is managed based on role based mechanisms where each user is able to perform specific operation and all levels based on his/her role, and this is achieved through Authorization process once the user is successfully authenticated by the underlying authentication mechanism.

Available Options

In SharePoint Services 3.0, MOSS and SharePoint Foundation, the Authentication is achieved mainly through following methods

1. Windows based Authentication, Including Active Directory Authentication (both Kerberos and NTLM protocols), anonymous and basic authentication. Authentication is done by underlying IIS.

2. Form based Authentication, which is implemented by the ASP.NET authentication provider model. SharePoint provides an LDAP membership provider which can talk to Active Directory, Active Directory Application mode (ADAM), Active Directory Lightweight Directory services (AD LDS). Forms-based authentication can also use the SQL Server provider included with ASP.NET. Forms authentication allows ASP.NET to perform the authentication for SharePoint Foundation, but In SharePoint Foundation, ASP.NET forms are supported only under claims authentication. A forms provider must be registered within a Web application that is configured for claims.

3. Claim based Authentication (SharePoint Foundation 2010), this new way of authentication facilitates by authenticating across widows based users, and non-windows based users, stronger real-time authentication, and delegating user identity between multiple applications. Claims based authentication addresses integration of different systems by allowing communications using open standards, and by providing a platform for developing more specialized ‘identity connectors’ between systems.

Above are the brief descriptions of available options for Authentication in SharePoint, to keep things simple and traceable I am omitting details because there could be a detailed discussion on each mentioned options.

How Windows Authentication works in SharePoint?

Now, let’s have a look how generally Authentication works in SharePoint.
1.  A client anonymously generates a request using his/her browser that initiates a connection to a SharePoint front-end server, which is handled by IIS with .NET through an HTTP GET request.
2.  If the zone is configured for anonymous access (such as for Internet scenarios), IIS continues to
process the request. Otherwise, IIS returns error 401.2 and requests authentication from the
client browser.
3.  The client browser receives the request and, depending on the zone and associated options,
authenticates the client. A common method is by prompting for a username/password, and
then passing an auth token back to SharePoint via IIS.
4.  IIS is waiting for a response in the HTTP conversation and accepts the auth token, and then
either authorizes or denies access. At this point, IIS passes the request to SharePoint through
.NET.
5. If the requested page has a Web Part that needs to access the back-end SQL databases,
SharePoint authenticates with the SQL Server and accesses the databases. The nature of the SQL authentication varies with the configuration options. For example, you can configure SQL Server authentication or Integrated Windows authentication using NTLM or Kerberos.

NTLM mode of Authentication

More specifically if NTLM mode of Authentication is configured then Step 3 and 4 would be as follows
3.1 IIS rejects the anonymous request with a 401.2 error and sends back a request to authenticate with NTLM.
3.2 The client browser receives the request, creates the Authentication token that includes domain and computer name, and then sends the authentication token to IIS.
3.3 IIS accepts the details and sends an NTLM challenge to the client.
3.4 The client responds with the response to the challenge (auth token again), encrypted with the
password of the user.
4.1 At this point, IIS needs to talk to the domain controller. It sends the client’s user name,
challenge, and challenge response.
4.2 The domain controller retrieves the password hash for the user and compares t to the challenge
response, which was encrypted using the user’s credentials. If there’s a match, the domain controller returns a successful authentication to IIS, and IIS can talk to the client browser.

Kerberos mode of Authentication

In case, where Kerberos mode (Kerberos uses a ticket system that authenticates once and then authorizes through delegation) of authentication is configured then Step 3 and 4 would be as follows

3.1 The client contacts the KDC (Key distribution center) on the domain controller and requests a ticket for the SPN (service principal name) based on what the browser client sent as the hostname.
3.2 If the KDC locates a matching SPN, it encrypts the ticket and returns it.
3.3 The browser client creates the authenticator and sends it with the service ticket to the IIS
server, which in turn decrypts the ticket, determines identity, and checks the permissions
(access control list) on the requested resource to see if access is permitted.
4 If access is permitted, IIS, through the Web Application service, contacts the SQL Server and the
service requests a ticket for the SQL Server from the KDC.

Generally, Windows based Authentication mode is selected whenever your application is running on windows, where Active directory is already configured, this is the easiest way of authenticating in SharePoint.

Anonymous Access

Anonymous Access is a way of providing unregistered users to interact with SharePoint sites. For internal deployments and Intranet sites Anonymous Access is always discouraged. The possible scenario in which anonymous authentication should be considered is on public-facing websites – so that people can browse sites without having to create accounts. Anonymous access does not provide item-level control, prevents document authoring, and does not provide access to remote interfaces.

Form Based Authentication in SharePoint

The Forms-based authentication option is generally selected when an environment does not use Active Directory, or needs to support external access. Form based Authentication basically builds on top of ASP.Net 2.0 Membership concepts, where there is Member Ship Provider which defines interfaces for identifying and authenticating individual users, and a Role Manager, which defines interfaces for grouping individual users into logical groups or roles4.
The authentication is authorization is done by redirecting to custom pages developed in asp.net using login controls and/or custom controls and after getting user credentials a user identity object is created which is used to authenticate users based on their roles against custom data base (SQL) or Active directory users.

General Practices

For internal sites, one should disable anonymous authentication as it may prevent compliance with business’s accountability requirements and business policies. Windows authentication with the Kerberos protocol is most proffered where this is possible, as it offers better integration and ease of use.

References
msdn.microsoft.com
Microsoft development kit for SharePoint

Is this Information helpful ? Please leave a Comment.

Implementation of Lazy Probabilistic Broadcasting.

The original algorithm is available at here.

The proposed algorithm as  follows:

Algorithm Lazy Probabilistic Broadcast (data dissemination)

Implements:

ProbabilisticBroadcast (pb).

Uses:

FairLossPointToPointLinks (flp2p);

UnreliableBroadcast (un).

upon event _ Init _ do

for all pi ∈ Π do

delivered[pi] := 0;

lsn := 0;

pending := stored := ∅;

procedure deliver-pending (s) is

while exists [Data, s, x, snx] ∈ pending such that

snx = delivered[s]+1 do

delivered[s] := delivered[s]+1;

pending := pending \ {[Data, s, x, snx]};

trigger (pbDeliver | s, x );

procedure gossip (msg) is

forall t ∈ pick-targets (fanout) do

trigger _(flp2pSend | t, msg );

upon event ( pbBroadcast | m )do

lsn := lsn+1;

trigger (unBroadcast | [Data, self, m, lsn] );

upon event (unDeliver | pi, [Data, sm, m, snm]) do

if (random() > store-threshold) then

stored := stored ∪ { [Data, sm, m, snm] };

if (snm = delivered[sm]+1) then

delivered[sm] := delivered[sm]+1;

trigger _ pbDeliver | sm,m _;

else if (snm > delivered[sm]+1) then

pending := pending ∪ { [Data, sm, m, snm] };

forall seqnb ∈ [delivered[sm] + 1, snm − 1] do

gossip ([Request, self, sm, seqnb, maxrounds−1]);

startTimer (TimeDelay, sn, snm);

end if

Algorithm Lazy Probabilistic Broadcast (recovery)

upon event (flp2pDeliver | pj, [Request, pi, sm, snm, r] )do

if ([Data, sm, m, snm] ∈ stored) then

trigger _ flp2pSend | pi, [Data, sm, m, snm] _;

else if (r > 0) then

gossip ([Request, pi, sm, snm, r − 1]);

upon event _ flp2pDeliver | pj, [Data, sm, m, snm] _ do

if (snm = delivered[sm]+1) then

delivered[sm] := delivered[sm]+1;

trigger _ pbDeliver | sm,m _;

deliver-pending (sm);

else if(snm > delivered[sm]+1) then

pending := pending ∪ { [Data, sm, m, snm] };

upon event (Timeout | s, sn ) do

forall seqnb ∈ [delivered[s] + 1, sn ] do

if exists [Data, s, x, sn] ∈ pending

delivered[s] := seqnb;

pending := pending \ {[Data, s, x, snx]};

trigger (pbDeliver | s, x );

end-if

else

{Msg is Lost}

end Algo

There are certain places where we changed the algorithm to increase the probability of the algorithm to broadcast messages to every node, and these are as follows

a)      There is a problem in “unDeliver” Event, we start and trigger our timer

it should start timer for the Current node, not for the missed node as depicted in algorithm.

b)      There is a new timer even in our proposed algorithm, that will take care of all missed messages from the last received sequence number up till the current one.

c)       In “flp2pDeliver”, we should only add those sequence numbers to our pending list, which are greater than Delivered[Sn]+1, not all.

As our “Lazy Probabilistic Broadcast (LPB)” uses Unreliable broadcast abstraction to transmit messages to the nearby nodes (Process) in the topology, so the successful transmission is based on the structure of topology. Furthermore, LPB uses fair-loss-point-to-point links, so it also effects the transmission of messages.

As the unreliable broadcast algorithm we use for LPB just broadcast a message to all nodes in the network regardless of either a message is successfully reached to all nodes in the network or not, so it is required for the successful transmission that the topology should be fully connected, otherwise even if there is no Link Loss, messages will not arrive to all nodes in the network, because there may be a case that some nodes are not directly connected with the sender or broadcaster.

Proposed Improvements

One way of implementing this algorithm just like “Eager Reliable Broadcast”, so that every node who will deliver a message will broadcast it to other nodes connected to it, so we may assume that the flp2pDeliver Event will also broadcast the message to all other nodes directly connected to it. This solution is just like the “Flooding Algorithm” where

  1. Each node acts as both a transmitter and a receiver.
  2. Each node tries to forward every message to every one of its neighbors except the source node.

[Ref: Flooding Algorithm]

There are certain problems with this technique, and the most critical is the wastages of network resources and message redundancy, so one step ahead could be to use the improved version of Flooding Algorithm that is “Selective Flooding Algorithm” where messages are forwarded to most likely same direction as the recipient.

Note: I have seen somewhere during finding solution for reliable broadcasting that, “Spanning tree” is a solution for successfully transmit messages over node, and I guess it would also work fine in our case if we use this in our LPB approach. [Advice comment]

Microsoft Second Shot is going to Expire

Get a second chance to pass your Microsoft Certification exam — free offer!

In the real world, you might need more than one chance at certification. With Second Shot, if you do not pass any IT professional, developer, or project manager certification exam on your first try, you can retake the exam without an additional cost.

Offer ends on June 30, 2009

Register for Second Shot and take advantage of our Career Assist Package—which means you can get any Microsoft E-Learning collection for just US$35.

Note Offer ends on June 30, 2009
Sign up for the Second Shot offer today

You have until June 30, 2009, to register, obtain an exam voucher, complete your first exam, retake your exam (if you did not pass on your first attempt), and complete any Microsoft E-Learning collections that you purchased.

When you register for this offer, you receive one free retake for each paid exam that you take and do not pass.

Register for Second Shot and obtain your US$35 Microsoft E-Learning collection

1. Register for Second Shot.
2. On the Thank You page that you receive, click the link to the Prometric Web site. You will receive a Second Shot voucher number and an e-learning promotion code.

Use your Second Shot voucher

Go to the Prometric Web site, call center, or test center. Use your Second Shot voucher number and schedule and pay for your initial exam.

Go to the Prometric Web site or visit the call center* or test center (Prometric.com)

Take your exam.

If you do not pass, return to the Prometric Web site or visit the call center or test center and use the same voucher number for your free retake exam.

Return to the Prometric Web site or visit the call center* or test center (Prometric.com)

Note: You must wait one day after taking your initial exam before you can register for your retake exam. This time is required to enter test results into the system.

qualify for this Second Shot offer?
Any Microsoft Learning IT professional, developer, or Microsoft Dynamics exam qualifies for this offer.