diff --git a/tools/diagnose_sp.ps1 b/tools/diagnose_sp.ps1
new file mode 100644
index 0000000..c907e42
--- /dev/null
+++ b/tools/diagnose_sp.ps1
@@ -0,0 +1,150 @@
+param (
+    [string]$identity,
+    [switch]$summary = $false
+)
+$ver = $host | select version
+if ($ver.Version.Major -gt 1) {$host.Runspace.ThreadOptions = "ReuseThread"} 
+if ((Get-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue) -eq $null) 
+{
+    Add-PSSnapin "Microsoft.SharePoint.PowerShell"
+}
+
+Function OutputIdentity() {
+    $FQDN = [System.Net.Dns]::GetHostByName(($env:COMPUTERNAME)).HostName
+    $UserInfo = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
+    Write-Output "diagnose_sp 1.0"
+    Write-Output ""
+    Write-Output "Local Time: $(Get-Date)"
+    Write-Output "  UTC Time: $($(Get-Date).toUniversalTime())"
+    Write-Output ""
+    Write-Output "I am $($UserInfo) running on $($env:COMPUTERNAME) ($($FQDN))"
+    Write-Output ""
+    $wos = Get-WmiObject -class Win32_OperatingSystem
+    $os = $wos.Caption.Trim()
+    if ($wos.CSDVersion -ne $Null) {
+        $os = "$os - $($wos.CSDVersion)"
+    }
+    Write-Output "OS: $os"
+    Write-Output ""
+}
+
+if ([string]::IsNullOrEmpty($identity) -eq $false) {
+  $virtualServers = Get-SPWebApplication -identity $identity | where {$_.IsAdministrationWebApplication -eq $false} | Select-Object Url
+} else {
+  $virtualServers = Get-SPWebApplication | where {$_.IsAdministrationWebApplication -eq $false} | Select-Object Url
+}
+
+OutputIdentity
+
+$allmembershipcount = 0
+$allgroupcount = 0
+$allitems = 0
+foreach ($url in $virtualServers) {
+    $webapp = Get-SPWebApplication -identity $url.Url
+    $virtualServer = $webapp.Url
+    [String]::Format("Web Application : {1} ({0})", $virtualServer, $webapp.Name);
+    [String]::Format("Sharepoint Version: {0}", $webapp.Farm.BuildVersion);
+    
+    try {
+        $contentdbs = Get-SPContentDatabase -webapplication $webapp.Url | Measure-Object;
+    } catch {
+        $contentdbs = Measure-Object
+    }
+    try {
+        $sitecolids = Get-SPSite -WebApplication $webapp.Url -limit all -ErrorAction Stop | Select-Object ID
+        $sitecols = $sitecolids | Measure-Object
+    } catch {
+        $sitecolids = $null
+        $sitecols = Measure-Object
+    }
+    
+    if ($summary -ne $true) {
+        "Number of Content DBs = " + $contentdbs.Count
+        "Number of Site Collections = " + $sitecols.Count
+    }
+    
+    if ($summary -ne $true) {
+        $mappings = $webapp.AlternateUrls
+        if ($mappings -eq $null -or $mappings.Count -eq 0) {
+            "Alternate Mappings: 0"
+        } else {
+            "Alternate Mappings: " + $mappings.Count
+            foreach($mapping in $mappings) {
+                $zone = $mapping.Zone
+                [String]::Format("  {0,8} {1}", $zone, $mapping.IncomingUrl);
+                $iis = $webapp.IisSettings[$zone]
+                if ($iis -ne $null) {
+                    $authmode = $iis.AuthenticationMode
+                    $anonymous = $iis.AllowAnonymous
+                    $wia = $iis.UseWindowsIntegratedAuthentication
+                    $kerberos = ($iis.DisableKerberos -eq $false)
+                    $claims = $iis.UseClaimsAuthentication
+                    $claimsforms = $iis.UseFormsClaimsAuthenticationProvider
+                    $claimstrusted = $iis.UseTrustedClaimsAuthenticationProvider
+                    $claimswindows = $iis.UseWindowsClaimsAuthenticationProvider
+                    "             Auth Mode: " + $authmode
+                    "             Use WIA: " + $wia
+                    "             Use Claims: " + $claims
+                    if ($claims) {
+                        "             Use Claims Forms: " + $claimsforms
+                        "             Use Claims Windows: " + $claimswindows
+                        "             Use Claims Trusted: " + $claimstrusted
+                    }
+                    "             Allow Kerberos: " + $kerberos
+                }
+            }
+        }
+    }
+
+
+    ""
+    if ($sitecolids -eq $null) {
+        continue
+    }
+    
+    $groupcount = 0
+    $usercount = 0;
+    $membershipcount = 0;
+    foreach ($siteid in $sitecolids) {
+        if ($siteid -eq $null -or $siteid.Id -eq $null) { 
+            continue
+        }
+        $site = Get-SPSite -identity $siteid.Id
+        $rootweb = [Microsoft.SharePoint.SPWeb]$site.RootWeb
+        [string]::Format("Site Name = {4} Site Url = {0} Users = {1} Groups = {2} RoleAssignments = {3}", $site.Url, $rootweb.SiteUsers.Count, $rootweb.SiteGroups.Count, $rootweb.RoleAssignments.Count, $rootweb.Title)
+        $groupcount = $rootweb.SiteGroups.Count;
+
+        $membershipcount = 0
+        foreach ($grp in $rootweb.SiteGroups) {
+          $membershipcount += $grp.Users.Count
+        }
+
+        $allgroupcount += $groupcount
+        $allmembershipcount += $membershipcount
+
+        if ($summary -ne $true) {
+            foreach($web in $site.AllWebs) {
+                $totallists = $web.Lists | Measure-Object
+                $versionedlists = $web.Lists | where { $_.EnableVersioning -eq $true} | Measure-Object
+                $itemcount = $web.Lists | Measure-Object -Property ItemCount -Sum
+
+                if ($totallists.Count -gt 0) {
+                    [string]::Format("Web --> {0}", $web.Url) 
+                    [string]::Format("Versioned Lists: {0} of {1}", $versionedlists.Count, $totallists.Count)
+                    [string]::Format("Items: {0}", $itemcount.Sum)
+                    $allitems += $itemcount.Sum
+                    ""
+                }                
+                $web.dispose()
+            }
+
+            [string]::Format("# SP Groups = {0}  # SP Memberships = {1}", $groupcount, $membershipcount)
+                ""            
+        }
+        
+        $rootweb.dispose()
+        $site.dispose()
+    }
+    ""
+}
+[string]::Format("Global # SP Groups = {0}  Global # SP Memberships = {1}  Global # Items = {2}", $allgroupcount, $allmembershipcount, $allitems)
