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

[玩转系统] SharePoint Online:PowerShell 迭代文档库中的所有文件

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

SharePoint Online:PowerShell 迭代文档库中的所有文件


要求:使用 PowerShell 获取 SharePoint Online 文档库中的文件列表。

SharePoint Online PowerShell 迭代文档库中的所有文件:

通常,在 PowerShell 脚本编写中,我们可能必须循环访问 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"
   
#Function to get all files of a folder
Function Get-FilesFromFolder([Microsoft.SharePoint.Client.Folder]$Folder)
{
    Write-host -f Yellow "Processing Folder:"$Folder.ServerRelativeUrl

    #Get All Files of the Folder
    $Ctx.load($Folder.files)
    $Ctx.ExecuteQuery()

    #list all files in Folder
    ForEach ($File in $Folder.files)
    {
        #Get the File Name or do something
        Write-host -f Magenta $File.Name
    }
        
    #Recursively Call the function to get files of all folders
    $Ctx.load($Folder.Folders)
    $Ctx.ExecuteQuery()

    #Exclude "Forms" system folder and iterate through each folder
    ForEach($SubFolder in $Folder.Folders | Where {$_.Name -ne "Forms"})
    {
        Get-FilesFromFolder -Folder $SubFolder
    }
}

#powershell list files in sharepoint online library
Function Get-SPODocLibraryFiles()
{
    param
    (
        [Parameter(Mandatory=$true)] [string] $SiteURL,
        [Parameter(Mandatory=$true)] [string] $LibraryName
    )
    Try {
        #Setup Credentials to connect
        $Cred = Get-Credential
        $Cred = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.UserName,$Cred.Password)
    
        #Setup the context
        $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
        $Ctx.Credentials = $Cred

        #Get the Library and Its Root Folder
        $Library=$Ctx.web.Lists.GetByTitle($LibraryName)
        $Ctx.Load($Library)
        $Ctx.Load($Library.RootFolder)
        $Ctx.ExecuteQuery()

        #Call the function to get Files of the Root Folder
        Get-FilesFromFolder -Folder $Library.RootFolder

     }
    Catch {
        write-host -f Red "Error Getting Files from Library!" $_.Exception.Message
    }
}
#Config Parameters
$SiteURL= "https://crescent.sharepoint.com"
$LibraryName="Project Docs"

#Call the function to Get All Files from a document library
Get-SPODocLibraryFiles -SiteURL $SiteURL -LibraryName $LibraryName 

用于列出所有文档的 SharePoint Online PowerShell:

[玩转系统] SharePoint Online:PowerShell 迭代文档库中的所有文件

PnP PowerShell 迭代文档库的所有文件和文件夹

让我们循环遍历每个文件夹并使用 PnP PowerShell 从给定库中获取文件:


#Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/marketing"
$ListName = "Documents"
$FolderSiteRelativeUrl = "/shared documents"

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

#Function to get all files from a folder
Function Get-SPOFilesFromFolder
{
    [cmdletbinding()]

    param
    (
        [Parameter(Mandatory=$true,ValueFromPipeline=$true)][Microsoft.SharePoint.Client.Folder]$Folder
    )
    Write-host "$($Folder.Name) ($($Folder.ServerRelativeUrl))" -f Yellow
    
    #Get Sub-folders of the folder
    Get-PnPProperty -ClientObject $Folder -Property ServerRelativeUrl, Folders | Out-Null    
    
    #calculate the FolderSiteRelativeUrl of the Folder
    If($Web.ServerRelativeUrl -eq "/")
    {
        $FolderSiteRelativeUrl = $Folder.ServerRelativeUrl
    }
    Else
    {        
        $FolderSiteRelativeUrl= $Folder.ServerRelativeUrl.Replace($Web.ServerRelativeUrl,'')
    }
    
    #Get All Files of the Folder
    $Files = Get-PnPFolderItem -FolderSiteRelativeUrl $FolderSiteRelativeUrl -ItemType File 
    $Files | ForEach-Object {
        Write-Host "`t$($_.Name)"
    }

    #Process all Sub-folders - Exclude "Forms" and Hidden folders
    ForEach($SubFolder in $Folder.Folders | Where {($_.Name -ne "Forms") -and (-Not($Folder.Name.StartsWith("_")))})
    {
        Get-SPOFilesFromFolder -Folder $SubFolder
    }
}
$Web = Get-PnPWeb
$Library =  Get-PnPList -Identity $ListName -Includes RootFolder
Get-SPOFilesFromFolder $Library.RootFolder    

如果要从 SharePoint Online 文档库获取所有文件,请使用:PowerShell 从 SharePoint Online 文档库获取所有文件

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

取消回复欢迎 发表评论:

关灯