Ricavare la query di una vista SharePoint con PowerShell
Un esempio di come estrarre una query CAML da una vista di una lista SharePoint. Funziona anche con le web part in pagina in quanto, per ogni web part, viene aggiunta una vista hidden sulla lista, identificabile tramite il suo guid:
Stampa a video la stringa che rappresenta la query CAML. Da un risultato simile al seguente:
Per funzionare usa questa funzione
che ho preso da questo sito Format-XML
PowerShell
#apro il sito
$w = Get-SPWeb http://sharepoint2013.sgart.local/hd
#prendo la lista
$l = $w.lists["nomeLista"]
#prendo la vista in base al sui guid (funziona anche se è una webpart in pagina)
$w = $l.Views | ?{$_.id -eq "BFB7796A-84DC-496B-936D-6EE01C561EB3"}
#formatto in xml la stringa della query
$s = Format-XML $x
#lo stampo a video
$s
#per sostituire i doppi apici
#$s.Replace('"', "'")
XML
<sgart>
<OrderBy>
<FieldRef Name="BlockingProblem" />
<FieldRef Name="PPSPriority" />
</OrderBy>
<Where>
<And>
<And>
<Or>
<Or>
<Eq>
<FieldRef Name="Developer" />
<Value Type="Integer">
<UserID Type="Integer" />
</Value>
</Eq>
<Eq>
<FieldRef Name="RequestExecutor" />
<Value Type="Integer">
<UserID Type="Integer" />
</Value>
</Eq>
</Or>
<Eq>
<FieldRef Name="RequestManager" />
<Value Type="Integer">
<UserID Type="Integer" />
</Value>
</Eq>
</Or>
<Neq>
<FieldRef Name="Status" />
<Value Type="Text">Closed</Value>
</Neq>
</And>
<Neq>
<FieldRef Name="Status" />
<Value Type="Text">Completed</Value>
</Neq>
</And>
</Where>
</sgart>
Per funzionare usa questa funzione
PowerShell
function Format-XML ([xml]$xml, $indent=2)
{
$StringWriter = New-Object System.IO.StringWriter
$XmlWriter = New-Object System.XMl.XmlTextWriter $StringWriter
$xmlWriter.Formatting = "indented"
$xmlWriter.Indentation = $Indent
$xml.WriteContentTo($XmlWriter)
$XmlWriter.Flush()
$StringWriter.Flush()
Write-Output $StringWriter.ToString()
}