亲爱的 SO'ers ,
我有一台运行Powershell的服务器通过Web服务访问SharePoint 2010数据。我有几个PS脚本在SharePoint数据上执行业务逻辑。 虽然此脚本有效但我的问题是性能 。
ows_
前缀XMLDocument
和 SelectNodes
,但
记住,这并不能说明将提供哪些字段
要充满活力。PSSerializer
this post建议,但我没有。是PS 3.0吗?SPFieldLookupValueCollection
matches2.Matches
花费 45秒来处理 800 项目,我相信这一点 方法可以改进。
SP2010XmlToPSObject.ps1
param ([string]$xml)
#Handle empty result set
if($xml.IndexOf("ItemCount='0'") -ge 0){return @()}
#Load SharePoint DLL
$a = [Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$rows = @()
$matches = $xml | Select-String "(<z:row(?:.|\n|\r)*?(?:/>))" -AllMatches
$matches.Matches | %{
$obj = New-Object PSObject
$matches2 = $_.Value | Select-String "(?:ows_)(\w*)(?:=)(?:`")((.*?)(?:`"))" -AllMatches
$matches2.Matches | % {
#handle multi-value fields
if($_.Groups[3].Value.IndexOf(";#") -gt -1){
#$a = @()
$o = New-Object Microsoft.SharePoint.SPFieldLookupValueCollection $_.Groups[3].Value
$obj | Add-Member NoteProperty $_.Groups[1].Value $o
}
else{
$obj | Add-Member NoteProperty $_.Groups[1].Value $_.Groups[3].Value
}
}
$rows += $obj
}
return $rows
P.S。对不起,看起来SO语法荧光笔不喜欢powershell的转义(`)char。
答案 0 :(得分:0)