SharePoint 2013

How to get All Site Collections on each SharePoint Content Database using Powershell

This short post can help you get all the report you need for your IT Managers. Have you ever been asked how many databases you have for your SharePoint Farm? That is easy go get. Just open SharePoint 2010/2013 Management Shell and type Get-SPDatabase. This will list all the databases configured for your SharePoint farm. The powershell needs to run on any of the SharePoint Servers with farm admin account or any user with farm admin priviledge. The purpose of this post is not this.

This short post explains how to get all content databases, and for each of the content databases, it will show you the site collections within this content database, as it contains only 1 line of PowerShell code, and is not very hard to understand.

Here is your one line of Script

Get-SPContentDatabase | %{Write-Output “- $($_.Name)”; foreach($site in $_.sites){write-Output $site.url}}

And the following is the screenshot of the output of the script from my SharePoint 2013 test farm.

2016-04-27_10-42-51

 

Hope this helps

Enjoy #Powershell

Tesfaye Gari tesfaye.gari@gmail.com OR @tesfayegari

How to get SharePoint 2013 user profile properties using REST API

In my recent project I have been asked to populate the Manager field of a custom list automatically with out asking the user to input manager information. Then I started researching how to achieve this requirement with minimal code and with out writing a server side code

I just researched a bit about Microsoft SharePoint REST API, specifically related to user profile. Then I found the following nice link  User profiles REST API reference. You can do a lot with REST API of user profile.

Since I wanted to get the current user manager and update the list item I have used the end point http://yourSharePointSite/_api/SP.UserProfiles.PeopleManager/GetMyProperties 

This end point returns the whole information about the current user as shown below on the screenshot

UsrProfileRESTAPI.png

User Profile GetMyProfile data

As shown above, there are a lof information we can get from the above end point like, account name, display name, email, job title, etc. I am not concerned about those informations at this moment. There are two places where the manager properties are displayed. One is <d:ExtendedReports m:type=”Collection(Edm.String)”> which is a collection of accounts. Those accounts my managers from top to bottom, which is from CEO to my immediate manager. The last element shows my manager. That is one way of getting my manager or there is <d:UserProfileProperties> which has a collection of objects out of which there is the following element

<d:element m:type=”SP.KeyValue”>
         <d:Key>Manager</d:Key>
        <d:Value>MyManagerAccount</d:Value>
        < d:ValueType>Edm.String</d:ValueType>
</d:element>

The above element has my manager account information. I have used the following javascript to get the information.

$.ajax({
url: “http://testnrecanow.nreca.org/_api/SP.UserProfiles.PeopleManager/GetMyProperties”,
type: “GET”,
headers: { “ACCEPT”: “application/json;odata=verbose” },
success: function(data){
alert(data.d.ExtendedManagers.results); //You can get any information you want here and process it. I get the manager here and update my SharePoint list
},
error: function(){
alert(“Failed to get customer”);
}
});

Hope this helps a lot. Let me know if you have any question. I can be reached at tesfaye.gari@gmail.com or https://twitter.com/tesfayegari

 

How to Export SharePoint 2010/2013 Version history of Document Library using PowerShell

Here is a powershell script you can use to get csv output of version history from SharePoint 2010 or 2013 list/libraries where versioning is enabled.The output includes changes to individual item fields as viewable from item version history.

The version information is accessed through SPListItemVersionCollection and SPFileVersionCollection objects.

$url  = yourSiteUrl #Example http://server.com/web
$web  = Get-SPWeb $url 
$docLibrary = "DocLibraryName" #Here use your document library name Ex SharedDocuments
$list = $web.Lists[$documenntLibrary] 
$csvFile = "C:\temp\versionHistory.csv" #Where the CSV file is saved 
 
function GetFieldValue([Microsoft.SharePoint.SPField]$field, [Microsoft.SharePoint.SPListItemVersion]$currentVersion) 
{ 
    if(($field.Type -eq "User"-and ($currentVersion[$field.Title] -ne $null)) 
    { 
        $newUser = [Microsoft.SharePoint.SPFieldUser]$field; 
        $fieldStr = $newUser.GetFieldValueAsText($currentVersion[$field.Title]) 
        $fieldStr = "$($field.Title): $fieldStr" 
    } 
    elseif(($field.Type -eq "Lookup"-and ($currentVersion[$field.Title] -ne $null)) 
    { 
        $newLookup = [Microsoft.SharePoint.SPFieldLookup]$field; 
        $fieldStr = $newLookup.GetFieldValueAsText($currentVersion[$field.Title]) 
        $fieldStr = "$($field.Title): $fieldStr" 
    } 
    elseif(($field.Type -eq "ModStat"-and ($currentVersion[$field.Title] -ne $null)) 
    { 
        $newModStat = [Microsoft.SharePoint.SPFieldModStat]$field; 
        $fieldStr = $newModStat.GetFieldValueAsText($currentVersion[$field.Title]) 
        $fieldStr = "$($field.Title): $fieldStr" 
    } 
    else 
    {                             
        $fieldStr = "$($field.Title): $($currentVersion[$field.Title])" 
    } 
    return $fieldStr 
}      
 
#Create/overwrite csv file, add headers: 
Set-Content -Path $csvFile -Value ",No.,Modified,Modified By, Size, Comment`n" 
 
foreach($item in $list.Items) 
{ 
    $versions = $item.Versions 
    $versionStr = "$($item["Title"])`n" 
     
    for($i = 0; $i -lt $versions.Count; $i++) 
    { 
        $currentVersion = $versions[$i] 
        $checkInComment = $item.File.Versions[$item.File.Versions.Count - $i].CheckInComment 
        if($i -eq 0) 
        { 
            $fileSize = $item.File.Length 
        } 
        else 
        { 
            $fileSize = $item.File.Versions[$item.File.Versions.Count - $i].Size 
        } 
        if($fileSize -lt 1MB) 
        { 
            $fileSize = "{0:N1}" -f ($fileSize / 1KB) + " KB" 
        } 
        else 
        { 
            $fileSize = "{0:N1}" -f ($fileSize / 1MB) + " MB" 
        } 
        $modifiedTime = $web.RegionalSettings.TimeZone.UTCToLocalTime($currentVersion.Created) 
        # CSV formatting: escape double quotes allow quotations, new line and commas within cell. Do not use space between comma and double quote escapes due to csv formating. 
        $versionStr +",$($currentVersion.VersionLabel),$($modifiedTime),""$($currentVersion.CreatedBy.User.DisplayName)"",""$($fileSize)"",""$($checkInComment)"",`n" 
 
        if($i -lt ($versions.Count - 1)) 
        { 
            # If more than one version: 
            $previousVersion = $versions[$i+1] 
            foreach($field in $currentVersion.Fields) 
            { 
                if(($field.ShowInVersionHistory -eq $true-and ($currentVersion[$field.Title] -ne $previousVersion[$field.Title]) -and ($currentVersion[$field.Title] -ne "

)) 
                { 
                    $fieldStr = GetFieldValue $field $currentVersion 
                    $versionStr +=",,""$fieldStr""`n" 
                } 
            } 
        } 
        else 
        { 
            # If first version: 
            foreach($field in $currentVersion.Fields) 
            { 
                if(($field.ShowInVersionHistory -eq $true-and ($currentVersion[$field.Title] -ne "

)) 
                { 
                    $fieldStr = GetFieldValue $field $currentVersion 
                    $versionStr +=",,""$fieldStr""`n" 
                } 
            } 
        } 
    } 
    #Append to file: 
    Add-Content -Path $csvFile -Value $versionStr 
} 
 
$web.Dispose() 

Please let me know if you have any question. The file must be saved as .ps1 extension and can be executed
contact me on tesfaye.gari@gmail.com for any quesiton 

Thanks 
Tesfaye Gari

ADDRESS

6066 Leesburg Pike Ste 320
Falls Church, Virginia 22044
Phone: (240) 547-6851

About MTM

MTM Training and Consulting is started by a group of highly qualified and motivated Information Technology Professionals to help you boost your IT career, and your company's productivity