Extract Documents to Folder based on Managed Metadata Column - SharePoint

Image
  How to Extract documents from Multiple Document libraries in to Folders. Each has a Managed Metadata Column with Sub Terms. I have created three Functions to  Download Document Create Folder Main Method Addition to above, script will log the Document URL and destination Folder Path in .log file Create Folder   Function   Create-Folder {      param  ( $folderPath )      if  (!( Test-Path  -path  $folderPath ))     {          New-Item   $folderPath  -type directory     } } Download Document ( this is stolen from Stackoverflow 😁 ) Function   Download-Document {      param ( $web ,  $folderPath ,  $docItem )       #File Download Snippet Reffered From : https://stackoverflow.com/questions/43350575/how-to-use-powershell-to-download-files-from-sharepoint        $File  =  $web .GetFile ( $docItem .Url )          $Binary  =  $File .OpenBinary ()          $detinationPath  =  $folderPath  +  "\"  +  $File .Name ;          $Stream  =  New-Object  System.IO.FileStream( $detinationPath

Get-SPFarmDetails Get SharePoint Farm Configuration Information



As part of upgrade process I had to document all my UAT, Prod and DR farm details.
Instead of going each server/farm and writing down all Farm Information, was able to come up with below functions with little help of Microsoft Documents about PowerShell.
In below Example I have written multiple PowerShell Functions to read each section Managed Paths , Web App Information, Out going Email information, Application Pool Details (both Web Application and Service Applications)
Each function will create Separate Out put CSV file

Application Pool Information

Below Get-AppPoolDetails Function will read and log both Web Application and Service Application Related Application Pool information in to a CSV File
Function Get-AppPoolDetails
{
    $spwebApplications = Get-SPWebApplication;

    #Get Web Application Related Application Pool Information
  Add-Content -Path $AppPoolOutput -Value " App Pool Type|WebApplication or Service| App Pool Name| App Pool Identity"
  foreach ($webApp in $spwebApplications)
  {
    Add-Content -Path $AppPoolOutput -Value "Web App | $($webApp.Url)| $($webApp.ApplicationPool.DisplayName)|$($webApp.ApplicationPool.ManagedAccount.Username)"
  }

  #Get Service Application Related Application Pool Information
  $AllserviceAppApps = Get-SPServiceApplication;
  foreach ($serviceApp in $AllserviceAppApps)
  {
    Add-Content -Path $AppPoolOutput -Value "Service App | $($serviceApp.Name)| $($serviceApp.ApplicationPool.DisplayName)|$($serviceApp.ApplicationPool.ProcessAccount.Name)"
  }

}




Out Going email Details

This will read SharePoint Central Administration Web App Pool Properties about Out Going Email
Function Get-OutgoingMail
{
    #Get Central Administration Web Application in to the Variable
  $OutGoing =   get-spwebapplication -IncludeCentralAdministration | where {$_.isAdministrationWebApplication}
  
  Add-Content -Path $OutBoundMailOutput -Value "Out Bound Server|OutboundMailSenderAddress|OutboundMailReplyToAddress"
  Add-Content -Path $OutBoundMailOutput -Value "$($OutGoing.outboundmailserviceinstance.Server.Address)|$($OutGoing.OutboundMailSenderAddress)|$($OutGoing.OutboundMailReplyToAddress)"
  
  $outGoing="";
}

Authentication Provider Information for each Web Application


Function Get-AuthProviders
{
    $spwebApplications = Get-SPWebApplication;
    Add-Content -Path $WebAppAuthProviderOutput -value "WebApp Name | Web App URL  |Auth Provider-DisplayName|Auth Provider-ClaimProviderName|Auth Provier-AllowAnonymous|Auth Provier-UseWindowsIntegratedAuthentication|Auth Provider-DisableKerberos"#Error file header

   
    foreach($webApp in $spwebApplications)
    {        
            $authProvider = Get-SPAuthenticationProvider -WebApplication $webApp -Zone Default;
            Add-Content -Path $WebAppAuthProviderOutput -value "$($webApp.Name) | $($webApp.Url) |$($authProvider.DisplayName)|$($authProvider.ClaimProviderName)|$($authProvider.AllowAnonymous)|$($authProvider.UseWindowsIntegratedAuthentication)|$($authProvider.DisableKerberos)"
    }
    $spwebApplications="";
}




Web Application Information and Alternative URL information for Each Web Application.

Function Get-WebApplications
{
    $spwebApplications = Get-SPWebApplication;

    Add-Content -Path $WebAppOutput -value "WebApp Name | Web App URL  |Application Pool| AlterNate URL-Incoming URL| AlterNate URL- zone| AlterNate URL-PublicURL"#Error file header

    foreach ($webApp in $spwebApplications)
    {
        Write-Host $webApp;

        $alternateURLs=$webApp.AlternateUrls;

        foreach ($altURL in $alternateURLs)
        {
            Add-Content -Path $WebAppOutput -value "$($webApp.Name) | $($webApp.Url) | $($webApp.ApplicationPool.DisplayName) |$($altURL.IncomingURL)|$($altURL.Zone)|$($altURL.PublicUrl)"#Error file 
        }        
    }

    $spwebApplications="";
}

Managed Path Information for Each Web Application.

function Get-ManagedPaths
{
    $SPWebApplications = Get-SPWebApplication

    Add-Content -Path $managedPathOutput -value "WebApp Name | Web App URL | Managed Path |Type"#Error file header

    foreach ($webApp in $SPWebApplications)
    {
       $allManagedPaths =  Get-SPManagedPath -WebApplication $webApp;
    
    #Get Each Managed path for each web application.   
       foreach($mgdPath in $allManagedPaths)
       {
        Write-Host $mgdPath.Name "-" $webApp.DisplayName;
        
        Add-Content -Path $managedPathOutput -value "$($webApp.DisplayName) | $($webApp.Url) | $($mgdPath.Name) |$($mgdPath.Type)"#Error file header
       }      
    }    
}



Full Script with Login Function information.

Add-PSSnapin Microsoft.SharePoint.PowerShell 
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null

#Preparing Execution ID Based on Start Date and Time
cls;
$timeStamp = Get-Date;
$ExecutionIDTitle =$timeStamp.ToString("yyyy-MM-dd-HH-mm");
$ExecutionID =$timeStamp.ToString("yyyyMMddHHmm");

$outputPath = "E:\Scripts\FarmConfiguration\OutPut\$ExecutionID";

$managedPathOutput = $outputPath+"-ManagedPaths.csv";

$WebAppOutput = $outputPath+"-WebApplications-AltURLs.csv";

$WebAppAuthProviderOutput = $outputPath+"-WebApplications-AuthProviders.csv";
$OutBoundMailOutput = $outputPath+"-OutBoundMailDetails.csv";
$AppPoolOutput = $outputPath+"-appPoolDetails.csv";

Function Get-AppPoolDetails
{
    $spwebApplications = Get-SPWebApplication;

    #Get Web Application Related Application Pool Information
  Add-Content -Path $AppPoolOutput -Value " App Pool Type|WebApplication or Service| App Pool Name| App Pool Identity"
  foreach ($webApp in $spwebApplications)
  {
    Add-Content -Path $AppPoolOutput -Value "Web App | $($webApp.Url)| $($webApp.ApplicationPool.DisplayName)|$($webApp.ApplicationPool.ManagedAccount.Username)"
  }

  #Get Service Application Related Application Pool Information
  $AllserviceAppApps = Get-SPServiceApplication;
  foreach ($serviceApp in $AllserviceAppApps)
  {
    Add-Content -Path $AppPoolOutput -Value "Service App | $($serviceApp.Name)| $($serviceApp.ApplicationPool.DisplayName)|$($serviceApp.ApplicationPool.ProcessAccount.Name)"
  }

}

Function Get-OutgoingMail
{
    #Get Central Administration Web Application in to the Variable
  $OutGoing =   get-spwebapplication -IncludeCentralAdministration | where {$_.isAdministrationWebApplication}
  
  Add-Content -Path $OutBoundMailOutput -Value "Out Bound Server|OutboundMailSenderAddress|OutboundMailReplyToAddress"
  Add-Content -Path $OutBoundMailOutput -Value "$($OutGoing.outboundmailserviceinstance.Server.Address)|$($OutGoing.OutboundMailSenderAddress)|$($OutGoing.OutboundMailReplyToAddress)"
  
  $outGoing="";
}

Function Get-AuthProviders
{
    $spwebApplications = Get-SPWebApplication;
    Add-Content -Path $WebAppAuthProviderOutput -value "WebApp Name | Web App URL  |Auth Provider-DisplayName|Auth Provider-ClaimProviderName|Auth Provier-AllowAnonymous|Auth Provier-UseWindowsIntegratedAuthentication|Auth Provider-DisableKerberos"#Error file header

   
    foreach($webApp in $spwebApplications)
    {        
            $authProvider = Get-SPAuthenticationProvider -WebApplication $webApp -Zone Default;
            Add-Content -Path $WebAppAuthProviderOutput -value "$($webApp.Name) | $($webApp.Url) |$($authProvider.DisplayName)|$($authProvider.ClaimProviderName)|$($authProvider.AllowAnonymous)|$($authProvider.UseWindowsIntegratedAuthentication)|$($authProvider.DisableKerberos)"#Error file header

    }
    $spwebApplications="";
}

Function Get-WebApplications
{
    $spwebApplications = Get-SPWebApplication;

    Add-Content -Path $WebAppOutput -value "WebApp Name | Web App URL  |Application Pool| AlterNate URL-Incoming URL| AlterNate URL- zone| AlterNate URL-PublicURL"#Error file header

    foreach ($webApp in $spwebApplications)
    {
        Write-Host $webApp;

        $alternateURLs=$webApp.AlternateUrls;

        foreach ($altURL in $alternateURLs)
        {
            Add-Content -Path $WebAppOutput -value "$($webApp.Name) | $($webApp.Url) | $($webApp.ApplicationPool.DisplayName) |$($altURL.IncomingURL)|$($altURL.Zone)|$($altURL.PublicUrl)"#Error file 
            
        }
        

    }

    $spwebApplications="";
}

function Get-ManagedPaths
{
    $SPWebApplications = Get-SPWebApplication

    Add-Content -Path $managedPathOutput -value "WebApp Name | Web App URL | Managed Path |Type"#Error file header

    foreach ($webApp in $SPWebApplications)
    {
       $allManagedPaths =  Get-SPManagedPath -WebApplication $webApp;
    
    #Get Each Managed path for each web application.   
       foreach($mgdPath in $allManagedPaths)
       {
        Write-Host $mgdPath.Name "-" $webApp.DisplayName;
        
        Add-Content -Path $managedPathOutput -value "$($webApp.DisplayName) | $($webApp.Url) | $($mgdPath.Name) |$($mgdPath.Type)"#Error file header
       }
      
    }
    
}

#Call All Methods one by one to log SharePoint Farm information
Get-ManagedPaths
Get-WebApplications;
Get-AuthProviders
Get-OutgoingMail
Get-AppPoolDetails;

Once Executed the entire Script, you will get your output files in Output Folder as follows






Pre-Upgrade Check List

Download Our Free SharePoint Pre-Upgrade Check List

* indicates required

Vintage Clan

Popular posts from this blog

System.Data.SqlClient.SqlException (0x80131904): The EXECUTE permission - User Profile Issue

How to Create Host Header to SharePoint Web Application

SharePoint 2013 Access Denied in Site Collections in Web Application