Azure Runbooks, PowerShell e SharePoint

Tradotto dall'originale in spagnolo. Leggi in spagnolo

Questo tutorial mostra come usare un Runbook di Azure Automation insieme a PowerShell per creare automaticamente una pagina complessa in SharePoint. Con questo processo potrai configurare una nuova pagina con un campo di tracking, aggiungere una web part personalizzata e gestire le immagini di intestazione, tutto tramite uno script.

iStock AI Generator

Prima di iniziare, è importante tenere presenti i prerequisiti:

  • Questo script usa una Managed Identity per l’autenticazione. Assicurati che l’account di Azure Automation abbia una Managed Identity assegnata e che disponga dei permessi necessari sul sito SharePoint.

Istruzioni per usare la Managed Identity con questo script:

  1. Verifica che l’account di Azure Automation abbia una Managed Identity abilitata.
  2. Assegna alla Managed Identity i permessi SharePoint necessari tramite il portale di Azure.
  3. Lo script userà la Managed Identity per autenticarsi su SharePoint senza dover salvare credenziali nello script.

Parametri

Questo blocco di codice raccoglie i parametri necessari per eseguire lo script. È importante fornire l’URL del sito SharePoint ($siteurl), il nome della pagina ($page_name) e il percorso relativo del sito ($relative_site).

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

Connessione a SharePoint

Qui si definisce la connessione a SharePoint Online usando l’identità gestita.

Connect-PnPOnline -Url $siteurl -ManagedIdentity

Variabili per la creazione della pagina e percorsi delle immagini

Si definiscono le variabili necessarie per creare la pagina e i percorsi delle immagini che verranno usate come intestazione.

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

Verificare se la pagina indicata esiste già

Questo codice verifica se la pagina che vogliamo creare esiste già nel sito SharePoint.

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

Creazione e configurazione della pagina

Se la pagina non esiste, viene eseguita una serie di comandi per:

  1. Aggiungere un nuovo campo di tassonomia alla libreria SitePages.
  2. Aggiungere una nuova pagina con il nome fornito.
  3. Aggiungere una web part personalizzata alla pagina.
  4. Preparare l’immagine di intestazione e copiarla nella posizione desiderata.
  5. Disattivare i commenti della pagina.
  6. Aggiornare l’intestazione della pagina con la nuova immagine.
  7. Pubblicare la pagina e impostare il proprietario del contenuto.
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
}

Chiudere la sessione PnP Online

Infine, dopo aver eseguito le azioni necessarie, la sessione PnP Online viene chiusa.

Disconnect-PnPOnline

Seguendo questi passaggi potrai automatizzare la creazione di una pagina complessa in SharePoint usando un Runbook di Azure Automation. Ecco il codice completo, senza commenti e tradotto in spagnolo.

Codice 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