Script to find all InfoPath forms across a web application

In SharePoint 2013 by rhodzyLeave a Comment

We recently had to find out which sites were using InfoPath forms across the estate, with the simple script below, it exported all sites and location where an #InfoPath form was present. The script writes out to a CSV file. Edit the items within bold

Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
#change the URL to match web application where you would like to search InfoPath forms
$SPWebApp = Get-SPWebApplication (‘http://YOURWEBAPP‘)

“Site Name`tList Name`tUrl`tDocs`tLast Mod`tWF`tLive WF`tLive WF Names`tTemplate” > E:\Scripts\InfoPathForms\AllIPDocLibsPROD.csv

#Loop through each site in the site collection
$cnt = $SPWebApp.Sites.count.toString()
“Total Site collection -: $cnt ”
foreach ($SPSite in $SPWebApp.Sites) #loop through all site collection
$cnt = $SPSite.allwebs.count.toString()
“Total number of Sites in collection -: $cnt ”
$SiteTitle = $SPSite.url.toString()
“Processing Site collection $SiteTitle”

$url = $SiteTitle
$req = [system.Net.WebRequest]::Create($url)
$req.UseDefaultCredentials = $true
try {
$res = $req.GetResponse()
} catch [System.Net.WebException] {
$res = $_.Exception.Response

if ( $res.StatusCode -eq “OK” )
foreach($webs in $SPSite.allwebs)

#use this for output
$webTitle = $webs.title.toString()
“PROCESSING site $webTitle”

#loop though each list in the current website
for($i=0;$i -ne $webs.lists.count;$i++)
$list = $webs.lists[$i] #variables for output.
$listTitle = $list.toString()
$listUrl = $list.DefaultViewUrl
$listCount = $list.ItemCount

if( $list.BaseType -eq “DocumentLibrary” -and
$list.BaseTemplate -eq “XMLForm”)
$listModDate = $list.LastItemModifiedDate.ToShortDateString()
$listTemplate = $list.ServerRelativeDocumentTemplateUrl
$listWorkflowCount = $list.WorkflowAssociations.Count
$listLiveWorkflowCount = 0
$listLiveWorkflows = “”
foreach ($wf in $list.WorkflowAssociations)
if ($wf.Enabled)
if ($listLiveWorkflows.Length -gt 0)
$listLiveWorkflows = “$listLiveWorkflows, $($wf.Name)”
$listLiveWorkflows = $wf.Name
“$webTitle`t$listTitle`t$listUrl`t$listCount`t$listModDate`t$listWorkflowCount`t$listLiveWorkflowCount`t$listLiveWorkflows`t$listTemplate” >> E:\Scripts\InfoPathForms\AllIPDocLibsPROD.csv
{ Add-Content E:\Scripts\InfoPathForms\DeadSites.txt “`n $SiteTitle” }
#Dispose of the site object