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.

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 :
- Vérifiez que le compte Azure Automation a une Managed Identity activée.
- Attribuez à la Managed Identity les autorisations SharePoint nécessaires depuis le portail Azure.
- 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 :
- Ajouter un nouveau champ de taxonomie à la bibliothèque SitePages.
- Ajouter une nouvelle page avec le nom fourni.
- Ajouter une web part personnalisée à la page.
- Préparer l’image d’en-tête et la copier à l’emplacement voulu.
- Désactiver les commentaires de la page.
- Mettre à jour l’en-tête de la page avec la nouvelle image.
- 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
