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.

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:
- Verifica que la cuenta de Azure Automation tenga habilitada una Managed Identity.
- Asigna a la Managed Identity los permisos necesarios de SharePoint utilizando el Portal de Azure.
- 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:
- Agregar un nuevo campo de taxonomía a la biblioteca SitePages.
- Agregar una nueva página con el nombre proporcionado.
- Añadir un webpart personalizado a la página.
- Preparar y copiar la imagen de encabezado a la ubicación deseada.
- Desactivar los comentarios en la página.
- Actualizar el encabezado de la página con la nueva imagen.
- 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
