SharePoint Online: PowerShell kullanarak Listeye Arama Sütunu Ekleme


Gereksinim: SharePoint Çevrimiçi Listesine yeni bir Arama Sütunu oluşturun.

SharePoint Çevrimiçi Listesinde Arama Sütunu Nasıl Oluşturulur?

SharePoint Online'daki Arama sütunu, sütun değerini aynı sitedeki farklı bir listedeki başka bir sütunun değerine göre doldurmanıza olanak tanır. PowerShell kullanarak arama sütunu eklemek, SharePoint listesi sütunlarınızı daha verimli bir şekilde otomatikleştirmenin ve yönetmenin güçlü bir yoludur. CSOM veya PnP PowerShell modülünü kullanarak istenilen özelliklere sahip arama sütununu oluşturabiliriz. Bu yöntem, kullanıcı arabirimi üzerinden manuel yapılandırmanın zahmetli veya zaman alıcı olabileceği SharePoint sütunlarını yönetmek için etkili ve komut dosyası oluşturulabilir bir çözüm sağlar.

Arama alanı eklemek için şu adımları izleyin:

  1. SharePoint Online sitenize göz atın ve arama sütunu eklemek istediğiniz hedef listeye gidin.
  2. Liste sekmesinin altında şeritteki “Sütun Oluştur” düğmesine tıklayın.
  3. Yeni sütununuza Ad verin, türü "Arama" olarak belirtin

  4. Arama için kaynak listesini ve alanı seçin, sütun açıklaması, gerekli alan değeri vb. gibi diğer isteğe bağlı değerleri belirtin ve SharePoint Online listesinde bir arama alanı oluşturmak için "Tamam"a tıklayın.

PowerShell, SharePoint Online'da Listeye Arama Sütunu Eklemek İçin:

Arama sütunları, bir listeyi başka bir listeyle ilişkilendirmek istediğinizde veya başka bir listeden değer aramak istediğinizde faydalıdır. PowerShell kullanarak SharePoint Online'daki bir listeye nasıl arama sütunu ekleneceğini görelim.


#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"

#Custom function to add column to list
Function Add-LookupColumnToList()
{ 
    param
    (
        [Parameter(Mandatory=$true)] [string] $SiteURL,
        [Parameter(Mandatory=$true)] [string] $ListName,
        [Parameter(Mandatory=$true)] [string] $Name,
        [Parameter(Mandatory=$true)] [string] $DisplayName,
        [Parameter(Mandatory=$false)] [string] $Description=[string]::Empty,
        [Parameter(Mandatory=$false)] [string] $IsRequired = "FALSE",
        [Parameter(Mandatory=$false)] [string] $EnforceUniqueValues = "FALSE",
        [Parameter(Mandatory=$true)] [string] $LookupListName,
        [Parameter(Mandatory=$true)] [string] $LookupField
    )

    #Generate new GUID for Field ID
    $FieldID = New-Guid

    Try {
        $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, List and Lookup list
        $Web = $Ctx.web
        $List = $Web.Lists.GetByTitle($ListName)
        $LookupList = $Web.Lists.GetByTitle($LookupListName)
        $Ctx.Load($Web)
        $Ctx.Load($List)
        $Ctx.Load($LookupList)
        $Ctx.ExecuteQuery()

        #Check if the column exists in list already
        $Fields = $List.Fields
        $Ctx.Load($Fields)
        $Ctx.executeQuery()
        $NewField = $Fields | where { ($_.Internalname -eq $Name) -or ($_.Title -eq $DisplayName) }
        if($NewField -ne $NULL)  
        {
            Write-host "Column $Name already exists in the List!" -f Yellow
        }
        else
        {
            #Get IDs of Lookup List and Web
            $LookupListID= $LookupList.id
            $LookupWebID=$web.Id
            
            #sharepoint online powershell create lookup field
            $FieldSchema = "<Field Type='Lookup' ID='{$FieldID}' DisplayName='$DisplayName' Name='$Name' Description='$Description' Required='$IsRequired' EnforceUniqueValues='$EnforceUniqueValues' List='$LookupListID' WebId='$LookupWebID' ShowField='$LookupField' />"
            $NewField = $List.Fields.AddFieldAsXml($FieldSchema,$True,[Microsoft.SharePoint.Client.AddFieldOptions]::AddFieldInternalNameHint)
            $Ctx.ExecuteQuery()    

            Write-host "New Column Added to the List Successfully!" -ForegroundColor Green  
        }
    }
    Catch {
        write-host -f Red "Error Adding Column to List!" $_.Exception.Message
    }
} 

#Set parameter values
$SiteURL="https://crescent.sharepoint.com"
$ListName="Project Milestone"
$Name="ParentProject"
$DisplayName="Parent Project"
$Description="Select the Parent Project from the List"
$LookupListName="Projects" #Parent List to Lookup
$LookupField="Title"

#Call the function to add column to list
Add-LookupColumnToList -SiteURL $SiteURL -ListName $ListName -Name $Name -DisplayName $DisplayName -Description $Description -LookupListName $LookupListName -LookupField $LookupField
İpuçları: Çoklu Arama Alanı için, Alan türünü "Lookup"tan "LookupMulti"ye değiştirin ve $FieldSchema değişkenine Mult='TRUE' özelliğini ekleyin!

PnP PowerShell, SharePoint Çevrimiçi Listesine Arama Sütunu Ekleyecek

Arama sütunları, bir listenin öğesini başka bir listenin öğesine bağlayarak SharePoint'teki listeler arasında ilişkiler oluşturmanıza olanak tanır. Size PnP PowerShell kullanarak SharePoint listesine hızlı bir şekilde nasıl arama sütunu ekleyeceğinizi göstereyim.


#Parameters 
$SiteURL = "https://crescent.sharepoint.com/sites/PMO"
$ListName= "Projects"
$DisplayName = "Parent Project"
$InternalName = "ParentProject"

$ParentListName="Parent Projects"
$LookupField = "Title" #Internal Name

#Connect to the site
Connect-PnPOnline -Url $SiteURL -Interactive        

#Add Lookup Field to the List    
Add-PnPField -List $ListName -Type Lookup -DisplayName $DisplayName -InternalName $InternalName -AddToDefaultView

#Set Field Properties
Set-PnPField -List $ListName -Identity $InternalName -Values @{LookupList=(Get-PnPList $ParentListName).Id.ToString(); LookupField=$LookupField}

Ayrıca Alan şeması XML'i ile bir arama sütunu da ekleyebiliriz:


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

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

#Get the ID of the Parent List
$LookupListID = (Get-PnPList -Identity $ParentListName).ID

#Define XML Schema for URL Field
$FieldXML= "<Field Type='Lookup' Name='ParentProject' ID='$([GUID]::NewGuid())' DisplayName='Parent Project' List='$LookupListID' ShowField='Title'></Field>"

#Add Lookup Field to list
Add-PnPFieldFromXml -FieldXml $FieldXML -List $ListName

İlgili makaleler