PowerShell tip to Identify lists with InfoPath Forms associated in SharePoint 2016 by using the Property “_ipfs_infopathenabled”


Sathish Nadarajan
SharePoint MVP
Published On :   15 Feb 2018
Visit Count
Today :  3    Total :   1317




To identify whether a list is associated with InfoPath Form or not, we have a Property called _ipfs_infopathenabled, which will have a value of True. If the list is not attached, the property itself will not be available.

And specifically, the infopath can be associated to any of the content type. Hence, we need to iterate through the content types in the list and identify whether any of the content type is having the property or not.

 function AddPowerShellSnapin()
 {
     try
     {
         Add-PSSnapin "Microsoft.SharePoint.PowerShell"
         Write-Host "Adding PowerShell Snap-in" -ForegroundColor Yellow
         # Try to get the PowerShell Snappin.  If not, then adding the PowerShell snappin on the Catch Block
         Get-PSSnapin "Microsoft.SharePoint.PowerShell" 
     }
     catch
     {
         if($Error[0].Exception.Message.Contains("No Windows PowerShell snap-ins matching the pattern 'Microsoft.SharePoint.PowerShell' were found"))
         {
             Add-PSSnapin "Microsoft.SharePoint.PowerShell"
         }
     }
     
     Write-Host "Finished Adding PowerShell Snap-in" -ForegroundColor Green
     
 }
 
 function IsInfoPathUsed($List)
 {
     $InfoPath_Used = "False"   
         
     foreach($contentType in $list.ContentTypes)
 	{
 		$InfoPath_Used = $contentType.ResourceFolder.Properties[“_ipfs_infopathenabled”]
 		if($InfoPath_Used -eq "True")
 		{
 			break;
 		}
 	}	
     
     return $InfoPath_Used
 }
 
 AddPowerShellSnapin
 
 $Web =  Get-SPWeb "http://sathishserver:555/sites/developersite"
          
         # Get the Lists    
         $Lists = $Web.Lists
         
         # Iterate through the Lists
         foreach($List in $Lists)
         {
             write-Host "Get Lists With InfoPath in -" + $List.Title
              
                 $IsInfoPathUsed = IsInfoPathUsed($List)
                 if($IsInfoPathUsed -eq "True")
                 {
                     $output = $_.SiteCollectionURL + "," + $Web.Url + "," + $List.Title + "," + $List.DefaultViewUrl 
                     Add-Content $ListsWithInfoPath_CSV_Path $output
                 }
           } 
 

Happy Coding,

Sathish Nadarajan.

Categories