Blog链接:​https://blog.51cto.com/13969817

相信大家都知道在SharePoint文档库中,如果配置了“Require documents to be checked out to edit”选项,那么用户将被迫签出所需的文件才能进行更改,一旦用户签出要编辑的文件,该文件将被锁定,只有签出的用户才能有编辑权限。如果其他用户需要对同一文档进行更改,则该文件应已由签出的用户签回。

在此期间,如果用户忘记签回文件,则签出的文件数将逐渐增加,在这种情况下,其他用户无法对这些文件进行更改,只能以只读模式打开文件。作为SharePoint管理员,您需要通知签出的用户签回文件。

本文我们将探讨如何使用PnP PowerShell查找所有签出的文件并签回这些文件。

开始之前,请确保已安装最新的PnP PowerShell模块。如果尚未安装,请运行以下命令:Install-Module -Name "PnP.PowerShell"

此PowerShell脚本获取给定SPO站点文档库中的所有签出文档,并逐一签入这些文档。最后,脚本将文件详细信息(如文件名、URL和签出用户名)及其签入状态报告导出到CSV文件。

$Result = @() #Result array
$SiteUrl = "https://contoso.sharepoint.com/sites/sitename"
$ListName = "Shared Documents"
Connect-PnPOnline -Url $SiteURL
$CAMLQuery = "
<View Scope='RecursiveAll'>
<Query>
<Where>
<IsNotNull><FieldRef Name='CheckoutUser' /></IsNotNull>
</Where>
</Query>
</View>"
$ListItems = Get-PnPListItem -List $ListName -Query $CAMLQuery -PageSize 1000
$i = 0;
$TotalFiles = $ListItems.Count
ForEach($ListItem in $ListItems)
{
$i++;
Write-Progress -activity "Processing $($ListItem.FieldValues.FileLeafRef) " -status "$i out of $TotalFiles files completed"
$CheckInStatus = '';
try
{
Set-PnPFileCheckedIn -Url $ListItem.FieldValues.FileRef -CheckinType MajorCheckIn -Comment "Check-in by Adminstrator"
$CheckInStatus ='Success'
}
catch
{
$CheckInStatus = = "Failed: $_"
}
$Result += New-Object PSObject -property $([ordered]@{
FileName = $ListItem.FieldValues.FileLeafRef
FileUrl = $ListItem.FieldValues.FileRef
CheckedOutUser = $ListItem.FieldValues.CheckoutUser.LookupValue
CheckInStatus = $CheckInStatus
})
}
$Result | Export-CSV "C:\Temp\Check-In-Status-Report.CSV" -NoTypeInformation -Encoding UTF8

谢谢大家的阅读