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.

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:
- Verifique se a conta do Azure Automation tem uma Managed Identity habilitada.
- Atribua à Managed Identity as permissões necessárias do SharePoint usando o Portal do Azure.
- 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:
- Adicionar um novo campo de taxonomia à biblioteca SitePages.
- Adicionar uma nova página com o nome informado.
- Adicionar uma web part personalizada à página.
- Preparar e copiar a imagem de cabeçalho para o local desejado.
- Desativar os comentários da página.
- Atualizar o cabeçalho da página com a nova imagem.
- 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
