通过 Powershell 在没有 SharePoint 模块的情况下列出 SharePoint 库中的文件

Listing files in SharePoint library without SharePoint module via Powershell

我们的 Exchange 服务器 (Exchange 2010/Win 2008 R2) 上有一个 powershell 脚本 运行,它需要查询 SharePoint 2013 中的 SharePoint 文档库,以查找名称每天可能不同的文件。例如,

Stats_2015_10_14_06_00_01.csv 或 Stats_2015_10_15_06_05_01.csv

这使我无法硬编码文件名并使用 System.Net.WebClient 方法在本地下载文件。

我也没有在 Exchange 服务器上安装 SharePoint 模块,当然那里的管理员也不想安装它。

我尝试将基于 HTTPS 的共享点站点名称转换为基于 UNC (\...) 的名称,但这似乎只适用于我的 Windows 8 笔记本电脑...但在 Exchange 服务器上失败了。

有什么建议吗?

使用 New-WebServiceProxy 调用 Lists.asmx 网络服务。

类似于:

$listname = "Documents" 
$query = "<Query>
              <Where>
                 <Lt>
                     <FieldRef Name="ID" />
                     <Value Type="Counter">3</Value>
                 </Lt>
              </Where>
          </Query>"
$queryOptions = ""
$Credentials = Get-Credential
$Ws = New-WebServiceProxy -Uri "Http://mysharepoint.com/mysite/_vti_bin/lists.asmx" -namespace WebServiceProxy -class lists -Credential $Credentials
[xml]$list = $Ws.GetListItems($listName, "", $query, "", 1000, $queryOptions, null)

参考 Lists.Asmx 调用:https://msdn.microsoft.com/en-us/library/office/websvclists.lists.getlistitems.aspx

您现在有一个包含列表中所有项目的 XML 的对象(基于您的查询)。然后您应该能够遍历该 XML 数据以找到您的文件名,然后使用 System.Net.WebClient 直接下载,因为您现在有了路径。

或者,您可以说服您的系统管理员让您将 Microsoft.Sharepoint.Dll 库安装到您的 Exchange 服务器中。然后,您可以使用 powershell 导入它并获取您习惯使用的所有通用 SP 数据结构(spsite、Splistitem 等),而无需安装完整的 Sharepoint Management shell 插件