2

我试图想出一个简单但可靠的 PowerShell 脚本来从 SharePoint 中的 InfoPath 文档中提取数据。到目前为止,进展顺利。Invoke-RestMethod 可以很好地使用 SharePoint 的 RSS 源,并且可以正确解码。但是当我下载实际文件时,事情变得有点奇怪。在我的文档库中保存 InfoPath 的文件中,Invoke-RestMethod 返回的结果不能正确推断出响应是 XML 文档。在这些情况下,我注意到响应开头有一个三字符的 Unicode BOM。如果我像下面的代码片段一样将其剥离并转换为 [xml],一切都会正常工作。

$infoPathRequest = '{0}?NoRedirect=true&OpenIn=PreferClient' -f $infoPathFile;    
$infoPathForm = (Invoke-RestMethod -Uri $infoPathRequest -UseDefaultCredentials)

#Sometimes Invoke-RestMethod gets confused by the BOM on the XML document.
#In that case, strip it off and convert it.
if ($infoPathForm.GetType().Name -eq "String") {
    $infoPathForm = [xml]$infoPathForm.Substring(3);    
}

但我更希望 Invoke-RestMethod 能够简单地正确检测到响应是 XML 并将其加载。如果我尝试在不剥离 BOM 的情况下将响应转换为 [xml],则会出现Cannot convert value <?xml version="1...错误。

我的理论是,由于 SharePoint 没有发送响应标头说字符集是 utf-8(它不是,我检查过),所以 Invoke-RestMethod 可能会退回到 ASCII?有没有更简洁的方法让 Invoke-RestMethod 正确检测内容类型?我在文档中没有看到任何可以强制它推断 UTF-8 字符集的内容。我有一种挥之不去的感觉,这是我能做的最好的事情。

4

1 回答 1

1

这是一个已知的错误并已报告,但由于这两个命令共享一个共同的核心Invoke-WebRequest,因此该错误也存在也就不足为奇了。Invoke-RestMethod请在提供的链接上对错误进行投票。该错误的详细信息中还提到了一些解决方法。

于 2013-12-05T06:30:28.577 回答