当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] SharePoint Online:PowerShell 批量签入所有文档

作者:精品下载站 日期:2024-12-14 14:38:47 浏览:16 分类:玩电脑

SharePoint Online:PowerShell 批量签入所有文档


要求:使用 PowerShell 批量签入 SharePoint Online 中的所有文档。

如何在 SharePoint Online 中批量签入文档?

在 SharePoint Online 中,可以检出上传到文档库的文档,以防止多个用户同时进行更改。用户完成编辑后,应将其重新签入。签出的文档可能会导致问题,并且如果未重新签入,则会阻止其他用户访问和编辑它们。

有时您可能需要在 SharePoint Online 中批量签入文档。如何在SharePoint Online中签入多个文档?那么,您可以签入文档库中的单个文件或多个文件,只需单击几下即可选择文件并选择“签入”。

[玩转系统] SharePoint Online:PowerShell 批量签入所有文档

所选文档现在将被签入并可供其他用户访问和编辑。

在 SharePoint Online 中批量签入多个文件

签入文档库中的所有文件怎么样?我们有一个文档库,其中包含已签出的许多文档的文件夹和子文件夹。我们想要签入并将它们提供给最终用户。以下是如何创建一个视图来查看库中所有签出的文件:

  1. 导航到您的文档库>>单击“设置”齿轮>>选择“库设置”
  2. 在“视图”部分下,创建一个新视图。在视图中包含“签出至”列。
  3. 将视图的“排序”顺序设置为“签出到”列的降序排列。
  4. 在“文件夹”部分,设置“显示不带文件夹的所有项目”。

此视图将在顶部列出所有签出的文件!您可以批量查看或签入它们。

[玩转系统] SharePoint Online:PowerShell 批量签入所有文档

通过执行这些简单的步骤,您可以签入 SharePoint Online 文档库中的所有签出文件。但是,在签出许多文档的大型文档库中,我尝试创建一个过滤所有签出文件的视图,但失败了,因为列表项计数> 5000(列表视图阈值问题!)。因此,让我们使用 PowerShell 签入 SharePoint 中的所有文件。

SharePoint Online:用于签入所有文档的 PowerShell

您是否需要在 SharePoint Online 中一次签入大量文件?如果是这样,PowerShell 可以提供帮助。以下是用于检入 SharePoint Online 文档库中的多个文件的 PowerShell:


#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
  
#Set parameters
$SiteURL="https://crescent.sharepoint.com"
$LibraryName="Shared Documents"
 
Try{
    #Get Credentials to connect
    $Cred= Get-Credential
    $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
  
    #Setup the context
    $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
    $Ctx.Credentials = $Credentials
 
    #Get the Web and List
    $Web = $Ctx.Web
    $Ctx.Load($Web)
    $List = $Web.Lists.GetByTitle($LibraryName)
    $Ctx.Load($List)
    $Ctx.ExecuteQuery()
 
    #Prepare the query
    $Query = New-Object Microsoft.SharePoint.Client.CamlQuery
    $Query.ViewXml = "@
    <View Scope='RecursiveAll'>
        <Query>
            <OrderBy><FieldRef Name='ID' Ascending='TRUE'/></OrderBy>
        </Query>
        <RowLimit Paged='TRUE'>2000</RowLimit>
    </View>"
 
    $Counter=1
    #Batch Process items: sharepoint online powershell bulk check in 
    Do {
        $ListItems = $List.GetItems($Query)
        $Ctx.Load($ListItems)
        $Ctx.ExecuteQuery()
 
        $Query.ListItemCollectionPosition = $ListItems.ListItemCollectionPosition
 
        #Get All Checked out files
        ForEach($Item in $ListItems | Where {$_.FileSystemObjectType -eq "File"})
        {
            #Display a Progress bar
            Write-Progress -Activity "Scanning Files in the Library" -Status "Testing if the file is Checked-Out '$($Item.FieldValues.FileRef)' ($Counter of $($List.ItemCount))" -PercentComplete (($Counter / $List.ItemCount) * 100)

            #Get the Checked out File data
            $File = $Ctx.Web.GetFileByServerRelativeUrl($Item["FileRef"])
            $Ctx.Load($File)
            $CheckedOutByUser = $File.CheckedOutByUser
            $Ctx.Load($CheckedOutByUser)
            $Ctx.ExecuteQuery()
 
            If($File.Level -eq "Checkout")
            {
                Write-Host -f Yellow "Found a Checked out File '$($File.Name)' at $($Web.url)$($Item['FileRef']), Checked Out By: $($CheckedOutByUser.LoginName)"

                #Check in the document
                $File.CheckIn("Checked-in By Administrator through PowerShell!", [Microsoft.SharePoint.Client.CheckinType]::MajorCheckIn)      
                $Ctx.ExecuteQuery()
                Write-Host -f Green "File '$($File.Name)' Checked-In Successfully!"
            }
            $Counter++
        }
    }While($Query.ListItemCollectionPosition -ne $Null)
}
Catch {
        write-host -f Red "Error Check In Files!" $_.Exception.Message
}

SharePoint Online:使用 PowerShell 签入多个文件

您是否正在尝试签入其他人当前签出的所有文件?让我们扫描整个网站集以查找签出的文件,然后使用 PowerShell 将它们签入。


#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
 
#PowerShell to Bulk check-in all documents
Function CheckIn-AllDocuments([String]$SiteURL)
{
    Try{
        #Setup the context
        $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
        $Ctx.Credentials = $Credentials

        #Get the Web
        $Web = $Ctx.Web
        $Ctx.Load($Web)
        $Ctx.Load($Web.Webs)
        $Ctx.ExecuteQuery()

        #Get All Lists from the web
        $Lists = $Web.Lists
        $Ctx.Load($Lists)
        $Ctx.ExecuteQuery()
 
        #Prepare the CAML query
        $Query = New-Object Microsoft.SharePoint.Client.CamlQuery
        $Query.ViewXml = "@
        <View Scope='RecursiveAll'>
            <Query>
                <OrderBy><FieldRef Name='ID' Ascending='TRUE'/></OrderBy>
            </Query>
            <RowLimit Paged='TRUE'>2000</RowLimit>
        </View>"

        #Array to hold Checked out files
        $CheckedOutFiles = @()
        Write-host -f Yellow "Processing Web:"$Web.Url
        
        #Iterate through each document library on the web
        ForEach($List in ($Lists | Where-Object {$_.BaseTemplate -eq 101 -and $_.Hidden -eq $False -and $_.ItemCount -gt 0}) )
        {
            Write-host -f Yellow "`t Processing Document Library:"$List.Title

                $Counter=1
                #Batch Process List items 
                Do {
                    $ListItems = $List.GetItems($Query)
                    $Ctx.Load($ListItems)
                    $Ctx.ExecuteQuery()

                    $Query.ListItemCollectionPosition = $ListItems.ListItemCollectionPosition

                    #Get All Checked out files
                    ForEach($Item in $ListItems | Where {$_.FileSystemObjectType -eq "File"})
                    {
                        #Display a Progress bar
                        Write-Progress -Activity "Scanning Files in the Library" -Status "Testing if the file is Checked-Out '$($Item.FieldValues.FileRef)' ($Counter of $($List.ItemCount))" -PercentComplete (($Counter / $List.ItemCount) * 100)

                        Try{
                            #Get the Checked out File data
                            $File = $Web.GetFileByServerRelativeUrl($Item["FileRef"])
                            $Ctx.Load($File)
                            $CheckedOutByUser = $File.CheckedOutByUser
                            $Ctx.Load($CheckedOutByUser)
                            $Ctx.ExecuteQuery()

                            If($File.Level -eq "Checkout")
                            {
                                Write-Host -f Green "`t`t Found a Checked out File '$($File.Name)' at $($Item['FileRef']), Checked Out By: $($CheckedOutByUser.LoginName)"

                                #Check in the document
                                $File.CheckIn("Checked-in By Administrator through PowerShell!", [Microsoft.SharePoint.Client.CheckinType]::MajorCheckIn)      
                                $Ctx.ExecuteQuery()
                                Write-Host -f Green "`t`t File '$($File.Name)' Checked-In Successfully!"
                            }
                        }
                        Catch {
                            write-host -f Red "Error Check In: $($Item['FileRef'])" $_.Exception.Message
                        }
                        $Counter++
                    }
                }While($Query.ListItemCollectionPosition -ne $Null)
        }

        #Iterate through each subsite of the current web and call the function recursively
        ForEach($Subweb in $Web.Webs)
        {
            #Call the function recursively to process all subsites underneath the current web
            CheckIn-AllDocuments -SiteURL $Subweb.URL
        }
    }
    Catch {
        write-host -f Red "Error Bulk Check In Files!" $_.Exception.Message
    }
}

#Config Parameters
$SiteURL="https://crescent.sharepoint.com/Sites/Marketing"
 
#Setup Credentials to connect
$Cred= Get-Credential
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
 
#Call the function: sharepoint online powershell to check in all documents in a Site Collection
CheckIn-AllDocuments -SiteURL $SiteURL

如果您需要在 SharePoint Online 中签入文件,请使用:PowerShell 在 SharePoint Online 中签入文档

PnP PowerShell 签入文档库中的所有文件

以下是如何使用 PnP PowerShell 签入 SharePoint Online 文档库中的所有文档:


#Parameter
$SiteURL= "https://crescent.sharepoint.com/sites/marketing/"
$ListName = "Documents"

#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive

#Get All List Items from the List - Filter Files
$ListItems = Get-PnPListItem -List $ListName -PageSize 500 | Where {$_["FileLeafRef"] -like "*.*"}

#Loop through each list item
ForEach ($Item in $ListItems)
{
    Write-host -f Yellow "Testing If file is Checked-Out:"$Item.FieldValues["FileRef"]
    #Get the File from List Item
    $File = Get-PnPProperty -ClientObject $Item -Property File

    If($File.Level -eq "Checkout")
    {
        #Check-In and Approve the File
        Set-PnPFileCheckedIn -Url $File.ServerRelativeUrl -CheckinType MajorCheckIn

        Write-host -f Green "`tFile Checked-In:"$File.ServerRelativeUrl
    }
} 

总之,使用 PowerShell 脚本在 SharePoint Online 中批量签入文件是一种节省时间和精力的简单有效的方法。遵循这些步骤将允许您在 SharePoint Online 中签入多个文档并防止协作和可访问性问题。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯