【问题标题】:De-serializing (SharePoint) XML to PSObject and Performance将 (SharePoint) XML 反序列化为 PSObject 和性能
【发布时间】:2014-09-01 12:30:05
【问题描述】:

亲爱的SO'ers

我有一台运行 Powershell 的服务器来通过 Web 服务访问 SharePoint 2010 数据。我有几个 PS 脚本在 SharePoint 数据上执行业务逻辑。 虽然此脚本有效,但我的问题是性能

  • 我省略了烦人的 ows_ 前缀
  • 我考虑过使用 XMLDocumentSelectNodes 但是 请记住,这并不能说明将提供哪些字段,所以这有 是动态的。
  • 我尝试访问PSSerializer this 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


    【解决方案1】:

    【讨论】:

    • 嘿,很好的发现......对此有任何想法:stackoverflow.com/questions/19811921/…
    • 我认为这是 V4 的功能。我没有做太多手动序列化,但我发现我越来越喜欢 JSON。
    • 对此表示赞赏。我想知道 RegEx 的性能是否可以得到改善……不过,这可能不是性能影响最严重的地方。
    猜你喜欢
    • 1970-01-01
    • 2018-11-20
    • 2020-06-30
    • 2021-11-20
    • 2012-10-26
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多