Azure Runbooks, PowerShell e SharePoint

Traduzido do original em espanhol. Ler em espanhol

Este tutorial mostra como usar um Runbook do Azure Automation junto com PowerShell para criar uma página complexa no SharePoint de forma automática. Com esse processo, você poderá configurar uma nova página com um campo de tracking, adicionar uma web part personalizada e gerenciar imagens de cabeçalho, tudo por meio de um script.

iStock AI Generator

Antes de começar, é importante considerar os pré-requisitos:

  • Este script usa Managed Identity para a autenticação. Certifique-se de que a conta do Azure Automation tenha uma Managed Identity atribuída e que ela tenha as permissões necessárias no site do SharePoint.

Instruções para usar a Managed Identity com este script:

  1. Verifique se a conta do Azure Automation tem uma Managed Identity habilitada.
  2. Atribua à Managed Identity as permissões necessárias do SharePoint usando o Portal do Azure.
  3. O script usará a Managed Identity para se autenticar no SharePoint sem precisar armazenar credenciais no script.

Parâmetros

Este bloco de código recebe os parâmetros necessários para executar o script. É importante informar a URL do site do SharePoint ($siteurl), o nome da página ($page_name) e o caminho relativo do site ($relative_site).

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

Conexão ao SharePoint

Aqui é definida a conexão ao SharePoint Online usando a identidade gerenciada.

Connect-PnPOnline -Url $siteurl -ManagedIdentity

Variáveis para a criação da página e caminhos das imagens

São definidas as variáveis necessárias para criar a página e os caminhos das imagens que serão usadas como cabeçalho.

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

Verificar se a página especificada já existe

Este código verifica se a página que estamos tentando criar já existe no site do SharePoint.

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

Criação e configuração da página

Se a página não existir, uma série de comandos é executada para:

  1. Adicionar um novo campo de taxonomia à biblioteca SitePages.
  2. Adicionar uma nova página com o nome informado.
  3. Adicionar uma web part personalizada à página.
  4. Preparar e copiar a imagem de cabeçalho para o local desejado.
  5. Desativar os comentários da página.
  6. Atualizar o cabeçalho da página com a nova imagem.
  7. Publicar a página e definir o proprietário do conteúdo.
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 a sessão PnP Online

Por fim, depois de executar as ações necessárias, a sessão PnP Online é desconectada.

Disconnect-PnPOnline

Seguindo estes passos, você poderá automatizar a criação de uma página complexa no SharePoint usando um Runbook do Azure Automation. A seguir, o código completo, sem os comentários e traduzido para o espanhol.

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