SharePoint Online: PowerShell'i kullanarak Tüm Listeleri ve Kitaplıkları Alın


SharePoint Online sitenizdeki tüm listelerin ve kitaplıkların envanterini almanın bir yolunu mu arıyorsunuz? Bu, sitenizi denetlemek veya sitenizde ne olduğuna dair genel bir bakış elde etmek için yararlı olabilir. Bu yazımızda tüm listeler ve kütüphaneler hakkında detaylı bilgi almak için PowerShell’i nasıl kullanacağınızı göstereceğiz.

SharePoint Online: Tüm Listeleri Almak için PowerShell

SharePoint Online ile çalışırken sitedeki tüm listeleri yinelemeniz gerekebilir. Belirtilen SharePoint Online sitesinden tüm listeleri ve kitaplıkları almak için PowerShell betiği:


#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
  
#Variables for Processing
$SiteUrl = "https://crescent.sharepoint.com/sites/sales"
$UserName="salaudeen@crescent.com"
$Password ="Password goes here"
 
#Setup Credentials to connect
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName,(ConvertTo-SecureString $Password -AsPlainText -Force))

Try { 
    #Set up the context
    $Context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteUrl) 
    $Context.Credentials = $credentials

    #sharepoint online powershell get all lists
    $Lists = $Context.web.Lists
    $Context.Load($Lists)
    $Context.ExecuteQuery()

    #Iterate through each list in a site   
    ForEach($List in $Lists)
    {
        #Get the List Name
        Write-host $List.Title
    }
}
catch {
    write-host "Error: $($_.Exception.Message)" -foregroundcolor Red
}

Bu PowerShell, tüm liste adlarını verilen SharePoint Online sitesinden alır.

SharePoint Çevrimiçi Sitesindeki Tüm Listelerin Envanterini Alma ve CSV'ye Aktarma

Biraz daha derine inelim ve tüm liste özelliklerini alıp bunları bir CSV dosyasına aktaralım:


#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"

#Config Variable
$SiteURL = "https://crescent.sharepoint.com/sites/marketing"
$CSVPath = "C:\Temp\ListInventory.csv"

#Setup Credentials to connect
$Cred = Get-Credential
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)

Try {
    #Setup the context
    $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
    $Ctx.Credentials = $Credentials
   
    #Get Lists from the site
    $Web = $Ctx.Web
    $Lists = $Web.Lists
    $Ctx.Load($Web)
    $Ctx.Load($Lists)
    $Ctx.ExecuteQuery()

    $ListDataCollection = @()
    #Get List details
    ForEach ($List in $Lists)
    {
        $ListData = New-Object PSObject -Property ([Ordered] @{
        ListName = $List.Title
        Description = $List.Description
        ItemCount = $List.ItemCount
        BaseTemplateID = $List.BaseTemplate
        Created = $List.Created 
        BaseType = $List.BaseType
        ContentTypesEnabled = $List.ContentTypesEnabled
        Hidden = $List.Hidden
        ListId = $List.Id
        IsCatalog = $List.IsCatalog 
        LastItemDeletedDate = $List.LastItemDeletedDate 
        LastItemModifiedDate = $List.LastItemModifiedDate 
        ParentWebUrl = $List.ParentWebUrl 
        VersioningEnabled = $List.EnableVersioning    
        })
        $ListDataCollection += $ListData
    }
    $ListDataCollection

    #Export List data to CSV
    $ListDataCollection | Export-Csv -Path $CSVPath -Force -NoTypeInformation
    Write-host -f Green "List Statistics Exported to CSV!"
}
Catch {
    write-host -f Red "Error:" $_.Exception.Message
}

SharePoint Online: Bir site koleksiyonundaki tüm listeler ve kitaplıklar aracılığıyla Yinelenecek PowerShell Komut Dosyası

Şimdi bu kodu yeniden kullanılabilir bir fonksiyon haline getirelim ve verilen sitedeki tüm sitelerden ve alt sitelerden listeler ve kütüphaneler alalım.


#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
  
#Variables for Processing
$SiteUrl = "https://crescent.sharepoint.com/sites/sales"
        
#Get Credentials to connect
$Cred= Get-Credential
 
#Setup Credentials to connect
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)

Try {
    #Function to Get all lists from the web
    Function Get-SPOList($Web)
    {
        #Get All Lists from the web
        $Lists = $Web.Lists
        $Context.Load($Lists)
        $Context.ExecuteQuery()

        #Get all lists from the web   
        ForEach($List in $Lists)
        {
            #Get the List Name
            Write-host $List.Title
        }
    }

    #Function to get all webs from given URL
    Function Get-SPOWeb($WebURL) 
    {
        #Set up the context
        $Context = New-Object Microsoft.SharePoint.Client.ClientContext($WebURL)
        $Context.Credentials = $Credentials

        $Web = $context.Web
        $Context.Load($web)
        #Get all immediate subsites of the site
        $Context.Load($web.Webs)  
        $Context.executeQuery()
 
        #Call the function to Get Lists of the web
        Write-host "Processing Web :"$Web.URL
        Get-SPOList $Web
 
        #Iterate through each subsite in the current web
        foreach ($Subweb in $web.Webs)
        {
            #Call the function recursively to process all subsites underneaththe current web
            Get-SPOWeb($SubWeb.URL)
        }
    }

    #Call the function to get all sites
    Get-SPOWeb $SiteUrl
}
catch {
    write-host "Error: $($_.Exception.Message)" -foregroundcolor Red
}

Komut Dosyası Çıkışı:

PnP PowerShell, Bir Site Koleksiyonundaki Tüm Listeleri ve Kitaplıkları Almak İçin

Tüm Sitelerin Liste ve Kütüphane Envanterini bir Site Koleksiyonunda alalım ve PnP PowerShell kullanarak CSV dosyasına aktaralım.


#Function to Get Lists and Libraries of a web
Function Get-SPOSiteInventory([Microsoft.SharePoint.Client.Web]$Web)
{
    Write-host -f Yellow "Getting Lists and Libraries from site:" $Web.URL

    #Get all lists and libraries
    $SiteInventory= @()
    $Lists= Get-PnPProperty -ClientObject $Web -Property Lists
    foreach ($List in $Lists)
    {
        $Data = new-object PSObject
        $Data | Add-member NoteProperty -Name "Site Name" -Value $Web.Title
        $Data | Add-member NoteProperty -Name "Site URL" -Value $Web.Url
        $Data | Add-member NoteProperty -Name "List Title" -Value $List.Title
        $Data | Add-member NoteProperty -Name "List URL" -Value $List.RootFolder.ServerRelativeUrl
        $Data | Add-member NoteProperty -Name "List Item Count" -Value $List.ItemCount
        $Data | Add-member NoteProperty -Name "Last Modified" -Value $List.LastItemModifiedDate
        $SiteInventory += $Data
    }

    #Get All Subwebs
    $SubWebs = Get-PnPProperty -ClientObject $Web -Property Webs
    Foreach ($Web in $SubWebs)
    {
        $SiteInventory+= Get-SPOSiteInventory -Web $Web
    }
    Return $SiteInventory
}

#Config Variables
$SiteURL = "https://crescent.sharepoint.com/sites/marketing"
$CSVFile = "C:\temp\SiteData.csv"

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

    #Get the Root Web
    $Web = Get-PnPWeb

    #Call the function and export results to CSV file
    Get-SPOSiteInventory -Web $Web | Export-CSV $CSVFile -NoTypeInformation
}
Catch {
    write-host "Error: $($_.Exception.Message)" -foregroundcolor Red
}

PowerShell kullanarak SharePoint Online'daki tüm belge kitaplıklarını almak için şunu kullanın: SharePoint Online: Tüm Belge Kitaplıklarını Listelemek için PowerShell

İlgili makaleler