PowerShell to Get All Files of Particular Type from a SharePoint Web Application

In a branding revamp project, After updating the new logo on the SharePoint CSS Files, found there are a lot of InfoPath forms out there with the old logo. So had to figure out all deployed InfoPath XSN Templates!

PowerShell Script to Find all XSN Files:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null
 
#For SharePoint 2007
function global:Get-SPSite($url){
    return new-Object Microsoft.SharePoint.SPSite($url)
}

#Function to Scan XSN Files
Function GetXSNFiles($Folder)
{
    foreach ($File in $Folder.Files | Where-Object {$_.Name -match ".xsn"} )
    {
        #Write data to CSV File
        "$($Folder.ParentWeb.Site.RootWeb.Title)" +"`t"+ "$($Folder.ParentWeb.Title)" +"`t" + "$($Folder.ParentWeb.URL+"/")$($File.URL)" +"`t" + "$($File.TimeLastModified)" >> XSNTemplates.csv
    }

    #Iterate through all subfolders
    foreach ($SubFolder in $Folder.SubFolders)
    {
        #Call the function recursively
        GetXSNFiles $SubFolder
    }
}
 
#Write the CSV header
"Site Collection `t Site `t Form Template `t Last Modified" > XSNTemplates.csv

#Get the web application
#Write-Host "Enter the Web Application URL:"
$WebAppURL= "https://sharepoint.crescent.com"   #$WebAppURL= Read-Host
$SiteColletion = Get-SPSite($WebAppURL)
$WebApp = $SiteColletion.WebApplication
 
#Loop through all site collections of the web app
    foreach ($site in $WebApp.Sites)
    { 
       #Get the collection of webs
       foreach($web in $site.AllWebs)
       {
              write-host "scanning site" $web.title "@" $web.URL              
              #Call the function to Get XSN Files
              GetXSNFiles($Web.RootFolder)
              
              #Dispose web object
              $web.dispose()
        } 
        #Dispose site object
        $site.Dispose()
    }
Write-host  "Report Generated: XSNTemplates.csv" -foregroundcolor green

Script will search each and every list and library for specific file type and log that information to a Tab Separated text file.

Salaudeen Rajack

Salaudeen Rajack - Information Technology Expert with Two decades of hands-on experience, specializing in SharePoint, PowerShell, Microsoft 365, and related products. Passionate about sharing the deep technical knowledge and experience to help others, through the real-world articles!

Leave a Reply

Your email address will not be published. Required fields are marked *