Azure Runbooks, Powershell y SharePoint

Este tutorial está diseñado para mostrar cómo utilizar un Runbook de Azure Automation junto con PowerShell para crear una página compleja en SharePoint de manera automática. A través de este proceso, podrás configurar una nueva página con un campo de tracking, agregar un webpart personalizado y manejar imágenes de encabezado, todo a través de un script.

iStock AI Generator

Antes de comenzar, es importante tener en cuenta los requisitos previos:

  • Este script utiliza Managed Identity para la autenticación. Asegúrate de que la cuenta de Azure Automation tenga una Managed Identity asignada y que tenga los permisos necesarios en el sitio de SharePoint.

Instrucciones para usar Managed Identity con este script:

  1. Verifica que la cuenta de Azure Automation tenga habilitada una Managed Identity.
  2. Asigna a la Managed Identity los permisos necesarios de SharePoint utilizando el Portal de Azure.
  3. El script utilizará la Managed Identity para autenticarse en SharePoint sin la necesidad de almacenar credenciales en el script.

Parámetros

Este bloque de código recoge los parámetros necesarios para ejecutar el script. Es importante proporcionar la URL del sitio de SharePoint ($siteurl), el nombre de la página ($page_name) y la ruta relativa del sitio ($relative_site).

Param
(
  [Parameter (Mandatory = $true)]  
  [string] $siteurl,
  [Parameter (Mandatory = $true)]
  [string] $page_name,
  [Parameter (Mandatory = $true)]
  [string] $relative_site
)

Conexión a SharePoint

Aquí se define la conexión a SharePoint Online utilizando la identidad administrada.

Connect-PnPOnline -Url $siteurl -ManagedIdentity

Variables para la creación de la página y rutas de imágenes

Se definen las variables necesarias para la creación de la página y las rutas de las imágenes que se utilizarán como encabezado.

$pageRelativeImage="SiteAssets/ZerogapBanner.jpg"
$source_url_header="/sites/ZerogapSite/SiteAssets/zerogap/ZerogapBanner.jpg"

Verificar si la página especificada ya existe

Este código verifica si la página que intentamos crear ya existe en el sitio de SharePoint.

$FileExists = Get-PnPPage -identity $page_name -ErrorAction SilentlyContinue

Creación de la página y configuración

En caso de que la página no exista, se ejecutan una serie de comandos para:

  1. Agregar un nuevo campo de taxonomía a la biblioteca SitePages.
  2. Agregar una nueva página con el nombre proporcionado.
  3. Añadir un webpart personalizado a la página.
  4. Preparar y copiar la imagen de encabezado a la ubicación deseada.
  5. Desactivar los comentarios en la página.
  6. Actualizar el encabezado de la página con la nueva imagen.
  7. Publicar la página y definir el propietario del contenido.
If($FileExists)
{
    Write-output "Nothing to do for this site:"
    write-output  $siteurl
}
Else {
     Add-PnPTaxonomyField -List "SitePages" -DisplayName "Tracking" -InternalName "Archive" -TaxonomyItemId 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'  -FieldOptions AddToAllContentTypes
    Add-PnPPage -Name $page_name
    $page_file=$page_name + ".aspx"

    Add-PnPPageWebPart -Page $page_file -Component "Zerogap Tracking"

    $PageHeaderImage = $relative_site + "/" + $pageRelativeImage
    $target_url=$relative_site + "/SiteAssets"
    $target_url=$target_url.replace('//','/')
    $DocumentLibrary = Get-PnPList -Identity "SiteAssets"

    if ($DocumentLibrary -eq $null) {
        $Web = Get-PnPWeb
        $Zerogap = $Web.Lists.EnsureSiteAssetsLibrary()
        $Zerogap = Invoke-PnPQuery
    }

    Copy-PnPFile -SourceUrl $source_url_header -TargetUrl $target_url -Force

    Set-PnPPage -Identity $page_file -CommentsEnabled:$false

    $page=Get-PnPClientSidePage -Identity $page_file
    $page.SetCustomPageHeader($PageHeaderImage)
    $page.Save()
    $Page.Publish()

    Set-PnPPage -Identity $page_file -Publish

    $values=@{"Editor"="admin@zerogap.uk"; "Author"="admin@zerogap.uk"}
    $id = Get-PnPPage -Identity $page_name | Select -ExpandProperty PageId
    $Zerogap = Set-PnPListItem -List "Site Pages" -Identity $id -Values $values -UpdateType UpdateOverwriteVersion

    Set-PnPPage -Identity $page_file -Publish
}

Desconectar la sesión PnP Online

Finalmente, después de ejecutar las acciones necesarias, se desconecta la sesión PnP Online.

Disconnect-PnPOnline

Al seguir estos pasos, podrás automatizar la creación de una página compleja en SharePoint utilizando un Runbook de Azure Automation. A continuación, se presenta el código completo sin los comentarios y traducido al español.

Código completo

Param
(
  [Parameter (Mandatory = $true)]  
  [string] $siteurl,
  [Parameter (Mandatory = $true)]
  [string] $page_name,
  [Parameter (Mandatory = $true)]
  [string] $relative_site
)

$tenant='zerogap.onmicrosoft.com'
$AdminName = "admin@Zerogap.uk"
Connect-PnPOnline -Url $siteurl -ManagedIdentity

$pageRelativeImage="SiteAssets/ZerogapBanner.jpg"
$source_url_header="/sites/ZerogapSite/SiteAssets/Zerogap/ZerogapBanner.jpg"

$FileExists = Get-PnPPage -identity $page_name -ErrorAction SilentlyContinue

If($FileExists)
{
    Write-output "Nothing to do for this site:"
    write-output  $siteurl
}
Else {
    Add-PnPTaxonomyField -List "SitePages" -DisplayName "Tracking" -InternalName "Archive" -TaxonomyItemId 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'  -FieldOptions AddToAllContentTypes
    Add-PnPPage -Name $page_name
    $page_file=$page_name + ".aspx"

    Add-PnPPageWebPart -Page $page_file -Component "Zerogap Tracking"

    $PageHeaderImage = $relative_site + "/" + $pageRelativeImage
    $target_url=$relative_site + "/SiteAssets"
    $target_url=$target_url.replace('//','/')
    $DocumentLibrary = Get-PnPList -Identity "SiteAssets"

    if ($DocumentLibrary -eq $null) {
        $Web = Get-PnPWeb
        $Zerogap = $Web.Lists.EnsureSiteAssetsLibrary()
        $Zerogap = Invoke-PnPQuery
    }

    Copy-PnPFile -SourceUrl $source_url_header -TargetUrl $target_url -Force

    Set-PnPPage -Identity $page_file -CommentsEnabled:$false

    $page=Get-PnPClientSidePage -Identity $page_file
    $page.SetCustomPageHeader($PageHeaderImage)
    $page.Save()
    $Page.Publish()

    Set-PnPPage -Identity $page_file -Publish

    $values=@{"Editor"="admin@zerogap.uk"; "Author"="admin@zerogap.uk"}
    $id = Get-PnPPage -Identity $page_name | Select -ExpandProperty PageId
    $Zerogap = Set-PnPListItem -List "Site Pages" -Identity $id -Values $values -UpdateType UpdateOverwriteVersion

    Set-PnPPage -Identity $page_file -Publish
}

Disconnect-PnPOnline

Maximiliano Díaz Doglia

AI Platform Engineer & Full-Stack Developer
Building Enterprise Integrations & Automations