In this article, let us see, how to retrieve the basic information of a List in a SharePoint Site.
####### This method will retrieve the Basic list Info ##################
function GetListInfo()
{
Write-Host "Entered GetListInfo Method" -ForegroundColor Yellow
Add-Content "$ProgressFile" "Entered GetListInfo Method"
$script:Progress = "8:Entered"
# Get WebApplication Object
$WebApplication = Get-SPWebApplication $Config.Configuration.WebApplication.URL
# Assign the XML Output File Paths
$ListInfo_XML_Path = $scriptBase + "Reports-$LogTimeListInfo.xml"
# Create the XML File Tags
$xmlWriter = New-Object System.XMl.XmlTextWriter($ListInfo_XML_Path,$Null)
$xmlWriter.Formatting = 'Indented'
$xmlWriter.Indentation = 1
$XmlWriter.IndentChar = "`t"
$xmlWriter.WriteStartDocument()
$xmlWriter.WriteComment('Web Information' + $WebApplication.DisplayName)
$xmlWriter.WriteStartElement('WebApplication')
$xmlWriter.WriteEndElement()
$xmlWriter.WriteEndDocument()
$xmlWriter.Flush()
$xmlWriter.Close()
# Get the Site Collections
$SiteCollections = $WebApplication | Get-SPSite -Limit All
#$SiteCollections = Get-SPSite "http://ctsc00556722901:5555/sites/TeamSite2/"
# write the output on XML File
$xmlDoc = [System.Xml.XmlDocument](Get-Content $ListInfo_XML_Path);
$siteCollectionNode = $xmlDoc.CreateElement("SiteCollections")
$xmlDoc.SelectSingleNode("//WebApplication").AppendChild($siteCollectionNode)
$xmlDoc.Save($ListInfo_XML_Path)
# iterate through the Site Collection
foreach($SiteCollection in $SiteCollections)
{
$siteCollectionName = $SiteCollection | select @{label = "Title";Ex = {$_.rootweb.Title}}
$Webs = Get-SPWeb -site $SiteCollection -Limit All
# write the output on XML File
$xmlDoc = [System.Xml.XmlDocument](Get-Content $ListInfo_XML_Path);
$siteCollectionNode = $xmlDoc.CreateElement("SiteCollection")
$xmlDoc.SelectSingleNode("//WebApplication/SiteCollections").AppendChild($siteCollectionNode)
$siteCollectionNode.SetAttribute("Name", $siteCollectionName.Title)
$subSitesNode = $siteCollectionNode.AppendChild($xmlDoc.CreateElement("SubSites"));
$subSitesNode.SetAttribute("Count", $Webs.Count)
$xmlDoc.Save($ListInfo_XML_Path)
# Iterate through the Webs
foreach($Web in $Webs)
{
$subSiteNameNode = $subSitesNode.AppendChild($xmlDoc.CreateElement("SubSite"));
$subSiteNameNode.SetAttribute("Title", $Web.Title)
$subSiteNameNode.SetAttribute("URL", $Web.Url)
$subSiteNameNode.SetAttribute("WebID", $Web.Id)
$parentWebTitle = ""
if($Web.ParentWebID -ne "00000000-0000-0000-0000-000000000000")
{
$parentWeb = $SiteCollection.OpenWeb($Web.ParentWebID)
$parentWebTitle = $parentWeb.Title
}
else
{
$parentWebTitle = "RootWeb"
}
$subSiteNameNode.SetAttribute("ParentWebName", $parentWebTitle)
$subSiteNameNode.SetAttribute("ParentWebID", $Web.ParentWebID)
# Get the Lists
$Lists = $Web.Lists
$ListsElement = $subSiteNameNode.AppendChild($xmlDoc.CreateElement("Lists"));
# Iterate through the Lists
foreach($List in $Lists)
{
$ListElement = $ListsElement.AppendChild($xmlDoc.CreateElement("List"));
$ListElement.SetAttribute("Title", $List.Title)
if($Config.Configuration.ListInfo.RootFolder -eq "True" -or $Config.Configuration.ListInfo.FetchAll -eq "True")
{
$RootFolderElement = $ListElement.AppendChild($xmlDoc.CreateElement("RootFolder"));
$RootFolderTextNode = $RootFolderElement.AppendChild($xmlDoc.CreateTextNode($List.RootFolder));
}
if($Config.Configuration.ListInfo.BaseType -eq "True" -or $Config.Configuration.ListInfo.FetchAll -eq "True")
{
$BaseTypeElement = $ListElement.AppendChild($xmlDoc.CreateElement("BaseType"));
$BaseTypeTextNode = $BaseTypeElement.AppendChild($xmlDoc.CreateTextNode($List.BaseType));
}
if($Config.Configuration.ListInfo.BaseTemplate -eq "True" -or $Config.Configuration.ListInfo.FetchAll -eq "True")
{
$BaseTemplateElement = $ListElement.AppendChild($xmlDoc.CreateElement("BaseTemplate"));
$BaseTemplateTextNode = $BaseTemplateElement.AppendChild($xmlDoc.CreateTextNode($List.BaseTemplate));
}
if($Config.Configuration.ListInfo.IsHidden -eq "True" -or $Config.Configuration.ListInfo.FetchAll -eq "True")
{
$HiddenElement = $ListElement.AppendChild($xmlDoc.CreateElement("IsHidden"));
$HiddenTextNode = $HiddenElement.AppendChild($xmlDoc.CreateTextNode($List.Hidden));
}
if($Config.Configuration.ListInfo.IsThrottled -eq "True" -or $Config.Configuration.ListInfo.FetchAll -eq "True")
{
$IsThrottledElement = $ListElement.AppendChild($xmlDoc.CreateElement("IsThrottled"));
$IsThrottledTextNode = $IsThrottledElement.AppendChild($xmlDoc.CreateTextNode($List.IsThrottled));
}
if($Config.Configuration.ListInfo.IsInfoPathUsed -eq "True" -or $Config.Configuration.ListInfo.FetchAll -eq "True")
{
$IsInfoPathUsed = IsInfoPathUsed($List)
$IsInfoPathUsedElement = $ListElement.AppendChild($xmlDoc.CreateElement("IsInfoPathUsed"));
$IsInfoPathUsedTextNode = $IsInfoPathUsedElement.AppendChild($xmlDoc.CreateTextNode($IsInfoPathUsed));
}
if($Config.Configuration.ListInfo.LastModified -eq "True" -or $Config.Configuration.ListInfo.FetchAll -eq "True")
{
$LastModifiedElement = $ListElement.AppendChild($xmlDoc.CreateElement("LastModified"));
$LastModifiedTextNode = $LastModifiedElement.AppendChild($xmlDoc.CreateTextNode($List.LastItemModifiedDate));
}
if($Config.Configuration.ListInfo.ListItemsCount -eq "True" -or $Config.Configuration.ListInfo.FetchAll -eq "True")
{
$ListItemsCountElement = $ListElement.AppendChild($xmlDoc.CreateElement("ListItemsCount"));
$ListItemsCountTextNode = $ListItemsCountElement.AppendChild($xmlDoc.CreateTextNode($List.ItemCount));
}
if($Config.Configuration.ListInfo.Fields -eq "True" -or $Config.Configuration.ListInfo.FetchAll -eq "True")
{
## Field Information Starts
$FieldsElement = $ListElement.AppendChild($xmlDoc.CreateElement("Fields"));
foreach($Field in $List.Fields)
{
$FieldElement = $FieldsElement.AppendChild($xmlDoc.CreateElement("Field"));
$FieldElement.SetAttribute("DisplayName", $Field)
$FieldElement.SetAttribute("InternalName", $Field.InternalName)
$FieldElement.SetAttribute("Group", $Field.Group)
$FieldElement.SetAttribute("Type", $Field.Type)
$FieldElement.SetAttribute("Id", $Field.Id)
$IsLookUp = "False";
If($Field.TypeAsString -eq "Lookup")
{
#if($Field.Title -eq "LookupTitle")
#{
$IsLookUp = "True";
$IsLookUpElement = $FieldElement.AppendChild($xmlDoc.CreateElement("IsLookUp"));
$IsLookUpElement.SetAttribute("LookUp", $IsLookUp)
if($Field.LookupList -ne $null -and $Field.LookupList -ne "")
{
try
{
$listGuid = [Guid]$Field.LookupList
$LookUpParentList = $Lists.GetList($Field.LookupList, $False)
$LookupParentListElement = $IsLookUpElement.AppendChild($xmlDoc.CreateElement("LookUpParentList"));
$LookupParentListTextNode = $LookupParentListElement.AppendChild($xmlDoc.CreateTextNode($LookUpParentList));
$LookupFieldElement = $IsLookUpElement.AppendChild($xmlDoc.CreateElement("LookUpField"));
$LookupFieldTextNode = $LookupFieldElement.AppendChild($xmlDoc.CreateTextNode($Field.LookupField));
}
catch
{
$LookupParentListElement = $IsLookUpElement.AppendChild($xmlDoc.CreateElement("LookUpParentList"));
$LookupParentListTextNode = $LookupParentListElement.AppendChild($xmlDoc.CreateTextNode($Field.LookupList));
$LookupFieldElement = $IsLookUpElement.AppendChild($xmlDoc.CreateElement("LookUpField"));
$LookupFieldTextNode = $LookupFieldElement.AppendChild($xmlDoc.CreateTextNode($Field.LookupField));
}
}
#}
}
else
{
$IsLookUpElement = $FieldElement.AppendChild($xmlDoc.CreateElement("IsLookUp"));
$IsLookUpElement.SetAttribute("LookUp", $IsLookUp)
}
}
## Field Information Ends
}
if($Config.Configuration.ListInfo.ContentTypes -eq "True" -or $Config.Configuration.ListInfo.FetchAll -eq "True")
{
### Content Types
$ContentTypesElement = $ListElement.AppendChild($xmlDoc.CreateElement("ContentTypes"));
$ContentTypesElement.SetAttribute("Count",$List.ContentTypes.Count);
foreach($ContentType in $List.ContentTypes)
{
$ContentTypeElement = $ContentTypesElement.AppendChild($xmlDoc.CreateElement("ContentType"));
$ContentTypeElement.SetAttribute("Name", $ContentType.Name)
$ContentTypeElement.SetAttribute("Id", $ContentType.Id)
$ContentTypeFieldsElement = $ContentTypeElement.AppendChild($xmlDoc.CreateElement("Fields"));
foreach($ContentTypeField in $ContentType.Fields)
{
$ContentTypeFieldElement = $ContentTypeFieldsElement.AppendChild($xmlDoc.CreateElement("Field"));
$ContentTypeFieldElement.SetAttribute("DisplayName", $ContentTypeField)
$ContentTypeFieldElement.SetAttribute("InternalName", $ContentTypeField.InternalName)
$ContentTypeFieldElement.SetAttribute("Id", $ContentTypeField.Id)
$ContentTypeFieldElement.SetAttribute("Type", $ContentTypeField.Type.ToString())
}
$ContentTypeWorkflowsElement = $ContentTypeElement.AppendChild($xmlDoc.CreateElement("Workflows"));
foreach($workflow in $ContentType.WorkFlowAssociations)
{
$ContentTypeWorkflowElement = $ContentTypeWorkflowsElement.AppendChild($xmlDoc.CreateElement("Workflow"));
$ContentTypeWorkflowElement.SetAttribute("DisplayName", $workflow.Name)
$ContentTypeWorkflowElement.SetAttribute("InternalName", $workflow.InternalName)
$ContentTypeWorkflowElement.SetAttribute("Id", $workflow.Id)
}
}
### Content Types Ends
}
if($Config.Configuration.ListInfo.Workflows -eq "True" -or $Config.Configuration.ListInfo.FetchAll -eq "True")
{
## Workflow Starts
$WorkflowsElement = $ListElement.AppendChild($xmlDoc.CreateElement("Workflows"));
$WorkflowsElement.SetAttribute("Count",$List.WorkflowAssociations.Count);
foreach($Workflow in $List.WorkflowAssociations)
{
$WorkflowElement = $WorkflowsElement.AppendChild($xmlDoc.CreateElement("Workflow"));
$WorkflowElement.SetAttribute("DisplayName", $Workflow.Name)
$WorkflowElement.SetAttribute("InternalName", $Workflow.InternalName)
$WorkflowElement.SetAttribute("Id", $Workflow.Id)
if($Workflow.RunningInstances -ge 1)
{
$WorkflowElement.SetAttribute("IsRunning", "True")
}
else
{
$WorkflowElement.SetAttribute("IsRunning", "False")
}
if($Workflow.InstantiationUrl -like "*NintexWorkflow*")
{
$WorkflowElement.SetAttribute("IsNintex", "True")
}
else
{
$WorkflowElement.SetAttribute("IsNintex", "False")
}
}
## Workflow Ends
}
}
}
$xmlDoc.Save($ListInfo_XML_Path)
}
Write-Host "Completed GetListInfo Method" -ForegroundColor Yellow
Add-Content "$ProgressFile" "Completed GetListInfo Method"
$script:Progress = "8:Success"
}
function IsInfoPathUsed($List)
{
$InfoPath_Used = "False"
if($List.BaseTemplate -eq "XMLForm")
{
foreach($item in $List.Items)
{
$Extension = $item.Name
$Extension = $Extension.Substring($Extension.IndexOf(".")+1)
if($Extension -eq "xsn" -or $Extension -eq "xml")
{
$InfoPath_Used = "True"
break
}
}
}
return $InfoPath_Used
}
############ End of Method ########
The snippet is self-explanatory.
Happy Coding,
Sathish Nadarajan.
Leave a comment