【发布时间】:2014-09-01 12:30:05
【问题描述】:
亲爱的SO'ers,
我有一台运行 Powershell 的服务器来通过 Web 服务访问 SharePoint 2010 数据。我有几个 PS 脚本在 SharePoint 数据上执行业务逻辑。 虽然此脚本有效,但我的问题是性能。
- 我省略了烦人的
ows_前缀 - 我考虑过使用
XMLDocument和SelectNodes但是 请记住,这并不能说明将提供哪些字段,所以这有 是动态的。 - 我尝试访问
PSSerializerthis post 推荐,但我没有。是否在 PS 3.0 中? - 我正在搜索一个多值字段并将其转换为
SPFieldLookupValueCollection -
似乎在
matches2.Matches的迭代期间发生了性能冲击
处理 800 个项目大约需要 45 秒,我相信这一点 方法有待改进。
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
附言抱歉,看起来 SO 语法荧光笔不喜欢 powershell 的转义 (`) 字符。
【问题讨论】:
标签: c# xml regex powershell sharepoint