Búsqueda de sitios web

SharePoint Online: actualice el valor del campo de metadatos administrados mediante PowerShell


Requisito: Actualizar el valor de la columna de metadatos administrados mediante PowerShell en SharePoint Online.

SharePoint Online: secuencia de comandos CSOM de PowerShell para actualizar el valor del campo de metadatos administrados

En SharePoint Online, puede configurar la columna de metadatos administrados mediante PowerShell. Esta publicación de blog le mostrará cómo actualizar una columna de metadatos administrados mediante PowerShell. Compartiremos algunos ejemplos de scripts que utilizan CSOM y PnP PowerShell para actualizar los valores de las columnas de metadatos administrados.

Suponiendo que los datos ya están completos en el almacén de términos, similar a lo que ve arriba, aquí está el script de PowerShell para establecer el valor de la columna de metadatos administrados:


#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"
Add-Type -Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Taxonomy.dll"
 
#Set parameter values
$SiteURL="https://crescent.sharepoint.com/sites/Ops/"
$ListName="Projects"
$ItemID="1"
$TaxonomyFieldTitle="Region"

#Termset parameters
$TermGroupName="Regions"
$TermSetName="MENA"
$TermName="UAE"

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 list and Item
        $List=$Ctx.web.Lists.GetByTitle($ListName)
        $Item = $List.GetItemById($ItemID)
        $Ctx.Load($Item)
        $Ctx.ExecuteQuery()

        #Get the Taxonomy Session
        $TaxonomySession = [Microsoft.SharePoint.Client.Taxonomy.TaxonomySession]::GetTaxonomySession($Ctx);
        $TaxonomySession.UpdateCache()
        $TermStore =$TaxonomySession.GetDefaultSiteCollectionTermStore()
        $Ctx.Load($TaxonomySession)
        $Ctx.Load($TermStore)
        $Ctx.ExecuteQuery()

        #Get the Term Group    
        $TermGroup = $TermStore.Groups.GetByName($TermGroupName)
        $Ctx.Load($TermGroup)

        #Get the termset
        $TermSet = $TermGroup.TermSets.GetByName($TermSetName)
        $Ctx.Load($TermSet)
        
        #Get the term
        $Term = $TermSet.Terms.GetByName($TermName) 
        $Ctx.Load($Term)
        $Ctx.ExecuteQuery()
       
        #sharepoint online powershell update managed metadata
        $Item[$TaxonomyFieldTitle] = $Term.Id.ToString()
        $Item.Update()
        $Ctx.ExecuteQuery()

        Write-host -f Green "Taxonomy Column Value has been updated successfully!"
     }
    Catch {
        write-host -f Red "Error updating Taxonomy Field Value!" $_.Exception.Message
   }

Este script actualiza el valor de la columna de metadatos administrados dado al término especificado.

En resumen, ¡puede actualizar el campo MMS con el término GUID! Por ejemplo: $ListItem[“ManagedMetadataField”]=“6165a8c3-1e46-45de-abfe-2dc28dd1f8c6”

SharePoint Online: PowerShell para actualizar los metadatos administrados

Alternativamente, también puede convertir la columna y establecer el valor del campo MMS. Aquí hay un ejemplo (Reemplazar desde la línea # 52):


#Get the Field
$Field = $List.Fields.GetByInternalNameOrTitle($TaxonomyFieldTitle)
$Ctx.Load($Field)
$Ctx.ExecuteQuery()

#Cast to Taxonomy Field
$TaxField = [Microsoft.SharePoint.Client.ClientContext].GetMethod("CastTo").MakeGenericMethod([Microsoft.SharePoint.Client.Taxonomy.TaxonomyField]).Invoke($Ctx, $Field)
$TaxFieldValue = New-Object Microsoft.SharePoint.Client.Taxonomy.TaxonomyFieldValue 
$TaxFieldValue.TermGuid = $Term.Id

#sharepoint online powershell to set managed metadata field value
$TaxField.SetFieldValueByValue($Item,$TaxFieldValue)
$Item.Update()
$Ctx.ExecuteQuery()

Actualizar la columna de metadatos administrados de valores múltiples mediante PowerShell en SharePoint Online:

Los scripts anteriores establecen un campo de metadatos administrado con un valor único. ¿Qué tal actualizar una columna MMS con la configuración "Permitir valores múltiples" habilitada?


#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"
Add-Type -Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Taxonomy.dll"
 
#Set parameter values
$SiteURL="https://crescent.sharepoint.com/sites/Ops/"
$ListName="Projects"
$ItemID="1"
$TaxonomyFieldTitle="Region"

#Managed Metadata parameters
$TermGroupName="Regions"
$TermSetName="MENA"
$TermNames = @('UAE','Qatar')

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 list and Item
        $List=$Ctx.web.Lists.GetByTitle($ListName)
        $Item = $List.GetItemById($ItemID)
        $Ctx.Load($Item)
        $Ctx.ExecuteQuery()

        #Get the Taxonomy Session
        $TaxonomySession = [Microsoft.SharePoint.Client.Taxonomy.TaxonomySession]::GetTaxonomySession($Ctx);
        $TaxonomySession.UpdateCache()
        $TermStore =$TaxonomySession.GetDefaultSiteCollectionTermStore()
        $Ctx.Load($TaxonomySession)
        $Ctx.Load($TermStore)
        $Ctx.ExecuteQuery()

        #Get the Term Group    
        $TermGroup = $TermStore.Groups.GetByName($TermGroupName)
        $Ctx.Load($TermGroup)

        #Get the termset
        $TermSet = $TermGroup.TermSets.GetByName($TermSetName)
        $Ctx.Load($TermSet)
        
        #Get All terms from the termset
        $Terms = $TermSet.GetAllTerms()
        $Ctx.Load($Terms)
        $Ctx.ExecuteQuery()

        $TermValues = @();
        #Get Each Term from the given Terms Array and form the Term String. E.g. "-1;#UAE|b3816a66-12d4-4232-f99e4620a;#-1;#Qatar|casae2c4-195-42d5-gb73ebcd5"
        ForEach($Term in $Terms)
        {
            ForEach($TermName in $TermNames)
            {
                If($TermName -eq $Term.Name)
                {
                    $TermValues += "-1;#" + $Term.Name + "|" + $Term.Id
                    $TermValuesString = $TermValues -join ";#"
                }
            }
        }

        #Get the Field to update
        $Field = $List.Fields.GetByInternalNameOrTitle($TaxonomyFieldTitle)
        $Ctx.Load($Field)
        $Ctx.ExecuteQuery()

        #Cast to Taxonomy Field
        $TaxField = [Microsoft.SharePoint.Client.ClientContext].GetMethod("CastTo").MakeGenericMethod([Microsoft.SharePoint.Client.Taxonomy.TaxonomyField]).Invoke($Ctx, $Field)

        #update managed metadata column powershell sharepoint online
        $TaxFieldValues = New-Object Microsoft.SharePoint.Client.Taxonomy.TaxonomyFieldValueCollection($Ctx, $TermValuesString, $TaxField)
        $TaxField.SetFieldValueByValueCollection($Item, $TaxFieldValues)
        $Item.Update()
        $Ctx.ExecuteQuery()

        Write-host -f Green "Taxonomy Column Value has been updated successfully!"
     }
    Catch {
        write-host -f Red "Error updating Taxonomy Field Value!" $_.Exception.Message
   }

PnP PowerShell para actualizar la columna de metadatos administrados en SharePoint Online

A continuación se explica cómo agregar valor a la columna de metadatos administrados mediante PnP PowerShell:


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

#Set MMS Column value in: "Group|Termset|Parent|Child" format
$FieldValue = "Crescent|Deals Pipeline|Department|Accounts"

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

#Update Managed Metadata Column value using PowerShell
Set-PnPListItem -List $ListName -Identity $ItemID -Values @{"Department"= $FieldValue}

Esto establece el valor de la columna MMS "Departamento".

¿Qué sucede si desea establecer un valor de columna de metadatos administrados que permita múltiples valores con PnP PowerShell? Claro, ¡simplemente envuélvalos dentro de una matriz!


#Config Variables
$SiteURL = "https://crescent.sharepoint.com/sites/PMO"
$ListName = "Projects"
$ItemID = 1
 
#Set Multivalued Managed Metadata Column value in: "Group|Termset|Parent|Child" format
$FieldValue = @("PMO|Classification|IT","PMO|Classification|HR")
 
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive

#Set Managed Metadata Column value using PowerShell
Set-PnPListItem -List $ListName -Identity $ItemID -Values @{"Department"= $FieldValue}

También podemos establecer el valor de un campo de metadatos administrados mediante el cmdlet Set-PnpTaxonomyFieldValue. P.ej.,


#Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/PMO"
$ListName = "Projects"
$FieldInternalName = "Department"
$ItemID = 1

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

#Get the List Item
$ListItem = Get-PnPListItem -List $ListName -Id $ItemID 

#Set Managed Metadata Column value in: "Group|Termset|Parent|Child" format
Set-PnpTaxonomyFieldValue -ListItem $ListItem -InternalFieldName $FieldInternalName -TermPath 'People|Department|HR'

También puede actualizar el valor del campo utilizando el ID de término (GUID) con el parámetro -TermID. De manera similar, para actualizar una columna de metadatos administrados con múltiples valores, use:


#Set Multivalued Managed Metadata Column value in: @{"TermId1"="Label1";"TermId2"="Label2"} format
Set-PnpTaxonomyFieldValue -ListItem $ListItem -InternalFieldName $FieldInternalName -Terms @{"4f31bd74-d1cf-4318-bcbc-6e7b481fcce8"="Engineering";"4038e965-dbb8-4969-8783-02af0cbcbdfd"="HR"}

Para obtener el valor de una columna de metadatos administrados, use: SharePoint Online: PowerShell para obtener el valor del campo de metadatos administrados

Artículos relacionados