Azure Runbooks, PowerShell et SharePoint

Traduit de l'original en espagnol. Lire en espagnol

Ce tutoriel montre comment utiliser un Runbook Azure Automation avec PowerShell pour créer automatiquement une page complexe dans SharePoint. Grâce à ce processus, vous pourrez configurer une nouvelle page avec un champ de suivi, ajouter une web part personnalisée et gérer les images d’en-tête, le tout à l’aide d’un script.

iStock AI Generator

Avant de commencer, il faut tenir compte des prérequis :

  • Ce script utilise une Managed Identity pour l’authentification. Assurez-vous que le compte Azure Automation dispose d’une Managed Identity attribuée et qu’elle possède les autorisations nécessaires sur le site SharePoint.

Instructions pour utiliser une Managed Identity avec ce script :

  1. Vérifiez que le compte Azure Automation a une Managed Identity activée.
  2. Attribuez à la Managed Identity les autorisations SharePoint nécessaires depuis le portail Azure.
  3. Le script utilisera la Managed Identity pour s’authentifier auprès de SharePoint sans avoir à stocker d’identifiants dans le script.

Paramètres

Ce bloc de code récupère les paramètres nécessaires à l’exécution du script. Il faut fournir l’URL du site SharePoint ($siteurl), le nom de la page ($page_name) et le chemin relatif du site ($relative_site).

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

Connexion à SharePoint

Ici, on définit la connexion à SharePoint Online à l’aide de l’identité managée.

Connect-PnPOnline -Url $siteurl -ManagedIdentity

Variables pour la création de la page et chemins des images

On définit les variables nécessaires à la création de la page et les chemins des images qui serviront d’en-tête.

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

Vérifier si la page indiquée existe déjà

Ce code vérifie si la page que nous essayons de créer existe déjà sur le site SharePoint.

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

Création et configuration de la page

Si la page n’existe pas, une série de commandes est exécutée pour :

  1. Ajouter un nouveau champ de taxonomie à la bibliothèque SitePages.
  2. Ajouter une nouvelle page avec le nom fourni.
  3. Ajouter une web part personnalisée à la page.
  4. Préparer l’image d’en-tête et la copier à l’emplacement voulu.
  5. Désactiver les commentaires de la page.
  6. Mettre à jour l’en-tête de la page avec la nouvelle image.
  7. Publier la page et définir le propriétaire du contenu.
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
}

Fermer la session PnP Online

Enfin, après avoir exécuté les actions nécessaires, la session PnP Online est fermée.

Disconnect-PnPOnline

En suivant ces étapes, vous pourrez automatiser la création d’une page complexe dans SharePoint à l’aide d’un Runbook Azure Automation. Voici le code complet, sans les commentaires et traduit en espagnol.

Code complet

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