SharePoint Online: PowerShell Komut Dosyasını Kullanarak Tüm Liste Öğelerini Alın


Gereksinim: Liste Öğelerini Almak için SharePoint Çevrimiçi PowerShell.

SharePoint Online: Tüm Liste Öğelerini Almak İçin PowerShell

PowerShell, görevleri otomatikleştirmek için kullanılabilecek güçlü bir betik dilidir. Bu blog yazısında, SharePoint Online listesindeki öğeleri sorgulamak için PowerShell'i nasıl kullanacağınızı göstereceğiz. Nasıl başlayacağınızla ilgili temel bilgileri ele alacağız ve SharePoint Online'da liste öğelerinin nasıl sorgulanacağına ilişkin bazı PowerShell örnekleri sunacağız. Başlayalım!

PowerShell kullanarak SharePoint Online listesinden öğeler nasıl alınır?

SharePoint Online'da bir liste öğesi almanın hızlı ve kolay bir yolunu mu arıyorsunuz? Aşağıda, tüm alt klasörlerdeki öğeler de dahil olmak üzere, verilen liste veya kitaplıktaki tüm öğeleri yinelemeli olarak almanızı sağlayacak bir PowerShell CSOM betiği örneği verilmiştir.


#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"
$ListName="Projects"

$UserName="admin@crescent.com"
$Password ="Password goes here"
 
#Setup Credentials to connect
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName,(ConvertTo-SecureString $Password -AsPlainText -Force))
 
#Set up the context
$Context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteUrl) 
$Context.Credentials = $credentials
  
#Get the List
$List = $Context.web.Lists.GetByTitle($ListName)

#sharepoint online get list items powershell
$ListItems = $List.GetItems([Microsoft.SharePoint.Client.CamlQuery]::CreateAllItemsQuery()) 
$Context.Load($ListItems)
$Context.ExecuteQuery()       

write-host "Total Number of List Items found:"$ListItems.Count

#Loop through each item
$ListItems | ForEach-Object {
    #Get the Title field value
    write-host $_["Title"]
}

SharePoint Online: PowerShell Liste Öğesini Kimliğe Göre Alacak

Kimliğine göre tek bir liste öğesi almak istiyorsanız aşağıdakileri kullanın:


#Get the List Item
$List = $Context.web.Lists.GetByTitle($ListName)
$ListItem = $List.GetItemById(15)
$Context.Load($ListItem)
$Context.ExecuteQuery()

Öğeyi aldıktan sonra, liste öğesi özelliklerini şu şekilde alabilirsiniz:


#sharepoint online powershell get list item properties
write-host $ListItem["Title"]

CAML ile Liste Öğelerini Filtrelemek ve Almak için PowerShell:

CAML Sorgusunu kullanarak Liste Öğelerini filtrelemeye ve sorgulamaya ne dersiniz? PowerShell kullanarak SharePoint Online listesinden öğeleri nasıl alacağınız aşağıda açıklanmıştır.

SharePoint Online: Başlığa Göre Liste Öğesi Almak İçin PowerShell
Burada, SharePoint Online'da CAML sorgularına göre filtrelenmiş PowerShell kullanarak liste öğelerini nasıl alacağınız açıklanmaktadır:


#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 Parameters
$SiteURL= "https://crescent.sharepoint.com/sites/marketing"
$ListName="Project Tasks"
$ItemTitle = "Project Kickoff"
  
#Setup Credentials to connect
$Cred = Get-Credential

Try {
    #Setup the context
    $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
    $Ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.UserName,$Cred.Password)
    
    #Get the web and List
    $Web=$Ctx.Web
    $List=$web.Lists.GetByTitle($ListName)
   
    #Get a List item by its Title
    $Query = New-Object Microsoft.SharePoint.Client.CamlQuery
    $Query.ViewXml = "@
    <View>
        <Query>
            <Where>
                <Eq>
                    <FieldRef Name='Title'/><Value Type='Text'>$ItemTitle</Value>
                </Eq>
            </Where>
        </Query>
    </View>"
 
    #Get All List Items matching the query
    $ListItems = $List.GetItems($Query)
    $Ctx.Load($ListItems)
    $Ctx.ExecuteQuery()

    Write-host "Total List Items:" $ListItems.count
   
    #Loop through each file in the library
    Foreach($Item in $ListItems)
    { 
        Write-host -f Green $Item["Title"]
    }
}
Catch {
    write-host -f Red "Error:" $_.Exception.Message
}

Bu PowerShell, SharePoint Online'da başlığa göre bir liste öğesi alır. Benzer şekilde, açılır listeler vb. gibi diğer veri türlerini de filtreleyebilirsiniz.


#Filter and Get the List Items using CAML
$List = $Context.web.Lists.GetByTitle($ListName)
$Query = New-Object Microsoft.SharePoint.Client.CamlQuery;
$Query.ViewXml = "<View><Query><Where><Eq><FieldRef Name='Priority' /><Value Type='Choice'>(3) High</Value></Eq></Where></Query></View>"

#sharepoint online powershell query list items
$ListItems = $list.GetItems($Query);
$Context.Load($ListItems)
$Context.ExecuteQuery()

#sharepoint online powershell loop through list items
$ListItems | ForEach-Object {
    #Get the Title field value
    write-host $_["Title"]
}

Klasörleri Filtrelemek ve Tüm Liste Öğelerini Almak için PowerShell

"ListItems" koleksiyonundaki tüm Klasör nesnelerini filtreleyelim ve yalnızca dosyaları 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"
   
#Config Parameters
$SiteURL= "https://crescent.sharepoint.com"
$LibraryName="Project Docs"
 
#Setup Credentials to connect
$Cred = Get-Credential
$Cred = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.UserName,$Cred.Password)
 
Try {
    #Setup the context
    $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
    $Ctx.Credentials = $Cred
   
    #Get the web and Library
    $Web=$Ctx.Web
    $List=$web.Lists.GetByTitle($LibraryName)
  
    #Get all List items from the library - Exclude "Folder" objects
    $Query = New-Object Microsoft.SharePoint.Client.CamlQuery
    $Query.ViewXml="<View Scope='RecursiveAll'><Query><Where><Eq><FieldRef Name='FSObjType'/><Value Type='Integer'>0</Value></Eq></Where></Query></View>"
    $ListItems = $List.GetItems($Query)
    $Ctx.Load($ListItems)
    $Ctx.ExecuteQuery()

    Write-host "Total List Items:" $ListItems.count
  
    #Loop through each file in the library
    Foreach($Item in $ListItems)
    { 
        Write-host -f Green $Item["Title"]
    }
}
Catch {
    write-host -f Red "Error deleting versions!" $_.Exception.Message
}

SharePoint Online: PnP PowerShell, Get-PnPListItem cmdlet'ini kullanarak Liste Öğelerini Alacak

PowerShell'deki SharePoint Online listesindeki öğeleri nasıl alabilirim? Get-PnPListItem cmdlet'ini kullanarak bir SharePoint Online listesindeki tüm liste öğelerini almak için PnP PowerShell'i burada bulabilirsiniz. PnP PowerShell Modülünün sisteminizde yüklü olduğundan ve bu PowerShell betiğini çalıştırmadan önce SharePoint sitesine erişim izniniz olduğundan emin olun.


#Config Variables
$SiteURL="https://Crescent.sharepoint.com/sites/marketing"
$ListName= "Documents"

#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Credentials (Get-Credential)

#sharepoint online pnp powershell get list items 
$ListItems = Get-PnPListItem -List $ListName -Fields "Title" -PageSize 2000

#Loop through each Item
foreach($ListItem in $ListItems)
{  
    Write-Host "Title:" $ListItem["Title"] 
}

Bu komut dosyası, verilen SharePoint Online site koleksiyonundaki "Belgeler" listesindeki tüm dosya ve klasörleri liste öğeleri olarak alır. Daha büyük listelerde “PageSize” parametresini kullandığınızdan emin olun. Aksi takdirde “Get-PnPListItem: Yapılacak işlem liste görüntüleme eşiğini aştığı için yasaklanmıştır.” ile karşılaşabilirsiniz. hata mesajı. Ayrıca, "Nerede" koşuluna veya "FolderServerRelativeurl" koşuluna sahip "Query" parametresine sahip Get-PnPListItem cmdlet'i daha büyük listelerde başarısız oluyor. Bugün itibariyle “PageSize”ın bu parametreler üzerinde herhangi bir etkisi bulunmamaktadır.


Get-PnPListItem -List $ListName -Fields "Title" -PageSize 2000

SharePoint Online'da PnP PowerShell kullanarak Liste Öğelerini Alma

Benzer şekilde, PowerShell ile SharePoint Online'da liste öğelerini filtrelemek ve almak için -Query parametresini kullanabilirsiniz:


#Config Variables
$SiteURL = "https://Crescent.sharepoint.com"
$ListName = "Projects"

#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Credentials (Get-Credential)

#CAML Query to Filter List Items
$Query = "<View><Query><Where><Eq><FieldRef Name='ProjectStatus' /><Value Type='Choice'>Active</Value></Eq></Where></Query></View>"

#get all list items using powershell sharepoint online - matching given query
$ListItems = Get-PnPListItem -List $ListName -Query $Query

#Loop through each Item
foreach($ListItem in $ListItems)
{  
    Write-Host "Id :" $ListItem["ID"] 
    Write-Host "Title :" $ListItem["Title"]
}

Liste Öğelerini SharePoint Online'dan Almak için Komut Dosyası Bloğunu Kullanma

SharePoint Online listesinden öğeleri almak için komut dosyası bloğunu ve ilerleme çubuğunu nasıl kullanacağınız aşağıda açıklanmıştır.


$List= Get-PnPList $ListName
$global:counter = 0;
$ListItems = Get-PnPListItem -List $ListName -PageSize 2000 -Fields "Title" -ScriptBlock { Param($items) $global:counter += $items.Count; Write-Progress -PercentComplete ($global:Counter / ($List.ItemCount) * 100) -Activity "Getting List Items of '$($List.Title)'" -Status "Processing Items $global:Counter to $($List.ItemCount)";}

Write-host $ListItems.Count

Benzer şekilde, ViewFields öğesini belirterek belirli alanlara sahip Liste Öğeleri alabilirsiniz.


#CAML Query to Get List Items with Specific fields
$Query = "<View><ViewFields><FieldRef Name='Title'/></ViewFields></View>"

#sharepoint online pnp powershell get list items 
$ListItems = Get-PnPListItem -List $ListName -PageSize 2000 -Query $Query

Sıkça Sorulan Sorular:

Bir SharePoint listesinden 5000'den fazla öğeyi nasıl edinirim?

5000'den fazla öğeden oluşan geniş bir listeniz olduğunu varsayalım. Bu durumda, eşik sınırını aşmak için liste öğelerini toplu olarak işlemeniz gerekebilir: "Yönetici tarafından zorunlu kılınan liste görüntüleme eşiğini aştığı için girişimde bulunulan işlem yasaktır." SharePoint Online'daki Büyük Listelerden (>5000 Öğe) Tüm Liste Öğelerini Almak için PowerShell

Get-PnPListItem'i -PageSize parametresiyle de kullanabilirsiniz.

Bir SharePoint listesini PowerShell'den nasıl dışarı aktarırım?

SharePoint Online listesini PowerShell'de bir CSV dosyasına aktarmak için şu PowerShell betiğini kullanın: Liste öğelerini CSV'ye aktarmak için SharePoint Online PowerShell

PowerShell kullanarak SharePoint listesindeki öğelerin sayısı nasıl alınır?

SharePoint Online listesindeki veya belge kitaplığındaki toplam öğe sayısını almak için "List.ItemCount" özelliğini kullanın. İşte bir SharePoint Online listesinin öğe sayısını almak için örnek bir PowerShell betiği: Liste öğesi sayısını almak için SharePoint Online PowerShell

PowerShell'i kullanarak SharePoint'teki bir belge kitaplığından dosyaların listesini nasıl alabilirim?

SharePoint Online belge kitaplığından tüm dosyaları almak için PnP PowerShell cmdlet'ini kullanın:”Get-PnPListItem -List “Kütüphane Adı”. Örnek bir komut dosyası: SharePoint Online: PowerShell kullanarak belge kitaplığındaki dosyaların listesini alın

İlgili makaleler