世纪互联sharepoint文件批量下载

问题描述

世纪互联sharepoint文件库文件无法多选或者文件夹下载

解决方案概述

通过Powershell可以进行下载,下面将具体说明这些设置

具体操作步骤

Step 0 升级到Powershell7.0以上版本

Step 0.1 检查当前版本

打开PowerShell,输入以下命令

1
$PSVersionTable.PSVersion

终端将显示当前的PowerShell版本号,如图所示

Step 0.2 搜索最新版本的 PowerShell

在终端中输入以下命令

1
winget search Microsoft.PowerShell

这个会显示当前最新的可用的版本 正常版和预览版。

Step 0.3 安装新版本

使用id参数安装PowerShell或PowerShell预览版

# 使用 Winget 安装 PowerShell

1
winget install --id Microsoft.Powershell --source winget

# 使用 Winget 安装 PowerShell 预览版

1
winget install --id Microsoft.Powershell.Preview --source winget

Step 0.4 验证更新

查阅文档 发现5.1和7版本可以共存,建议旧版本不要卸载,目前7尚未完全兼容5

更新后程序路径到”C:\Program Files\PowerShell\7\

在文件夹下面打开”pwsh.exe”,即可以使用powershell 7.3版本

下面是全部下载过程

以下内容都将继续已经完成powershell 7.X版本的安装

Step 1 安装PnP PowerShell模块

在C:\Program Files\PowerShell\7\”找到运行程序,右键点击并选择“以管理员身份运行”。

安装新版模块

1
Install-Module -Name PnP.PowerShell -Scope CurrentUser -Force

Step 2 使用新版模块连接SharePoint

一旦新版模块安装完成,使用以下命令连接 SharePoint:

1
Connect-PnPOnline -Url "https://yourdomain.sharepoint.com/sites/yourfolder" -Credentials (Get-Credential)

可修改为在线验证方式,将会有弹窗进行web验证。

1
Connect-PnPOnline -Url "https://yourdomain.sharepoint.com/sites/yourfolder" -UseWebLogin

Step 3 Sharepoint 文件夹/文件下载

Step 3.1 获取所有文件的路径

首先,可以列出所有文件的路径,以确保路径是正确的。以下脚本将列出文档库中所有文件的路径:

1
2
3
4
5
6
7
8
9
$libraryName = "Shared Documents"

# 获取库中的所有文件
$files = Get-PnPListItem -List $libraryName -PageSize 2000

foreach ($file in $files) {
$filePath = $file["FileRef"]
Write-Host $filePath
}

Step 3.2 下载文件

确认路径格式正确后,再使用 Get-PnPListItem 命令下载文件。以下是一个示例脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$localPath = "存放路径"
$libraryName = "Shared Documents"

# 获取库中的所有文件(递归)
$files = Get-PnPListItem -List $libraryName -PageSize 2000 -Query "<View Scope='RecursiveAll'><RowLimit Paged='TRUE'>5000</RowLimit></View>"

foreach ($file in $files) {
$filePath = $file["FileRef"]

# 检查是否为文件
if ($filePath -notmatch "/$") {
$relativeFilePath = $filePath.Substring($filePath.IndexOf($libraryName) + $libraryName.Length).TrimStart("/")
$localFilePath = Join-Path -Path $localPath -ChildPath $relativeFilePath

# 创建本地目录
$localDirectory = [System.IO.Path]::GetDirectoryName($localFilePath)
if (-not (Test-Path -Path $localDirectory)) {
New-Item -ItemType Directory -Path $localDirectory | Out-Null
}

# 下载文件
Write-Host "Downloading $filePath to $localFilePath"
Get-PnPFile -Url $filePath -Path $localDirectory -FileName ([System.IO.Path]::GetFileName($filePath)) -AsFile
} else {
Write-Host "Skipping folder: $filePath"
}
}

其他说明

检查 PowerShell 版本

新版 PnP.PowerShell 模块可能需要较新的 PowerShell 版本(如 PowerShell 7.x)。请检查你的 PowerShell 版本:

1
$PSVersionTable.PSVersion

如果你使用的是旧版 PowerShell,务必安装 PowerShell 7.x。

如果之前在5.X版本的powershell安装过此模块请先卸载

运行以下命令卸载模块:

1
Uninstall-Module -Name SharePointPnPPowerShellOnline -AllVersions -Force

重新启动 PowerShell

有时,安装新模块后需要重新启动 PowerShell 窗口以加载新模块。

确保模块未被占用

有时PowerShell的其他脚本或进程可能会占用模块。确保没有其他PowerShell 实例正在运行。

确保新版 PnP.PowerShell 模块已正确安装

首先,确认新版模块是否已经安装成功:

1
Get-Module -ListAvailable -Name PnP.PowerShell

如果没有列出 PnP.PowerShell 模块,则需要重新安装:

1
Install-Module -Name PnP.PowerShell -Scope CurrentUser -Force

确保正确导入模块

如果模块已安装,但 PowerShell 未识别 Connect-PnPOnline cmdlet,尝试手动导入模块:

1
*mport-Module PnP.PowerShell

使用新版的连接命令

新版 PnP.PowerShell 模块中的连接命令有所不同,你应该使用 Connect-PnPOnline 来连接到 SharePoint。

请注意 URL 必须是站点根 URL,而不是文件链接。

尝试以下命令:

1
Connect-PnPOnline -Url "https://yourdomain.sharepoint.com/sites/yourfolder" -Credentials (Get-Credential)

总结

关闭所有 PowerShell 窗口,或以管理员权限重新启动 PowerShell 进行模块卸载。

卸载旧版模块

1
Uninstall-Module -Name SharePointPnPPowerShellOnline -AllVersions -Force

安装新版模块

1
Install-Module -Name PnP.PowerShell -Scope CurrentUser -Force

使用新版模块连接 SharePoint

1
Connect-PnPOnline -Url "https://yourdomain.sharepoint.com/sites/yourfolder" -Credentials (Get-Credential)

运行递归脚本下载到本地即可