问题描述
在检查Onedrive存储时发现,云端数据显示要比实际文件大很多,一番寻找原因后发现问题所在:主要在于云端存储了文件的历史版本信息,导致同一文件在云端占用空间远大于本地占用空间,OneDrive中的历史版本功能会将一个文件的过去历史版本都存储在OneDrive,以方便还原至以前的版本,如图所示,一个文件占用500M空间,但是因为存在三个版本,所以占用空间达到500M*3。极大的浪费了空间。
所以Onedrive占用空间计算如下:
OneDrive云端占用存储空间=OneDrive内所有文件大小+OneDrive所有文件的历史版本总和+OneDrive线上回收站中的文件总和
问题解决
选择无版本控制
首先,安装SharePointOnlineManagementShell,下载链接。
然后输入如下命令:
Connect-SPOService -url https://<yourdomain>-admin.sharepoint.com -Credential admin@<yourdomain>.onmicrosoft.com
请将 <yourdomain>
改为你的分配域前缀,admin@<yourdomain>.onmicrosoft.com
为你的管理员账号。
然后根据提示输入密码并登录,登录后输入以下命令:
Set-SPOTenant -EnableMinimumVersionRequirement $False
效果如图:
进入版本控制页面
选择OneDrive设置
,进入旧版本网站设置
,点击网站库和列表
,选择自定义“文档”
,选择版本控制设置
,选择无版本控制
。
无版本设置完成,之后就不会添加历史版本了。
清除现有历史版本
PowerShell 脚本
不推荐此方法,容易出问题,并且需要一定基础。
步骤 1:安装所需模块
首先,确保你安装了 SharePointPnPPowerShellOnline
模块。打开 PowerShell 并运行:
Install-Module SharePointPnPPowerShellOnline -Force -AllowClobber
步骤 2:编写 PowerShell 脚本
编写以下脚本,将其保存为 Remove-OneDriveVersions.ps1
:
# 加载 SharePointPnP 模块
Import-Module SharePointPnPPowerShellOnline
# 配置
$siteUrl = "https://yourdomain-my.sharepoint.com/personal/your_username_domain_com"
$username = "[email protected]"
$password = "your_password" | ConvertTo-SecureString -AsPlainText -Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $password
# 连接到 OneDrive
Connect-PnPOnline -Url $siteUrl -Credentials $cred
# 获取文件库中的所有文件
$files = Get-PnPListItem -List "Documents"
foreach ($file in $files) {
$fileVersions = Get-PnPFileVersion -FileUrl $file["FileRef"]
foreach ($version in $fileVersions) {
# 删除文件版本
Remove-PnPFileVersion -Url $file["FileRef"] -ID $version.ID
}
}
# 断开连接
Disconnect-PnPOnline
步骤 3:运行脚本
打开 PowerShell,导航到脚本所在目录,运行脚本:
.\Remove-OneDriveVersions.ps1
注意事项
- 备份数据:在批量删除文件版本之前,确保你已经备份了所有重要数据。
- 正确配置:修改
$siteUrl
、$username
和$password
为你的 OneDrive 站点 URL 和登录凭据。 - 权限:确保你有足够的权限访问和管理 OneDrive 文件版本。
手动删除
如果文件少的话,可以一个一个删除,如果文件过多,可以将文件保存在本地,然后在云端将文件删除,这个过程会将所有的历史版本一起删除,然后重新上传文件即可。