Usando PowerShell para fazer backup de uma tabela do Dataverse
Traduzido do original em espanhol. Ler em espanhol
Para fazer uma cópia de segurança de uma tabela do Dataverse e salvá-la como arquivo CSV no SharePoint usando PowerShell, siga os passos abaixo. Este tutorial supõe que você tem as permissões necessárias e configurou corretamente as credenciais do aplicativo no Azure AD para que ele tenha acesso tanto ao Dataverse quanto ao SharePoint.

Configurar variáveis
Primeiro, defina as variáveis que contêm as credenciais do seu aplicativo e os identificadores necessários para a autenticação.
# Set variables
$TenantId = 'xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' #Directory (tenant) ID
$AppId = 'xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' #Application (client) ID
$ClientSecret = Get-AutomationVariable -Name [Client Secret Variable Placeholder] #ClientSecretValue - Encrypted
$PowerPlatformOrg = '[OrgID Placeholder]' #OrgID
$PowerPlatformEnvironmentUrl = "https://$($PowerPlatformOrg).crm.dynamics.com"
$oAuthTokenEndpoint = "https://login.microsoftonline.com/$($TenantId)/oauth2/v2.0/token"
Solicitar o token de acesso
Para interagir com a API do Dataverse, você precisa de um token de acesso. Use o bloco de código a seguir para obtê-lo.
$authBody = @{
client_id = $AppId;
client_secret = $ClientSecret;
scope = "$($PowerPlatformEnvironmentUrl)/.default"
grant_type = 'client_credentials'
}
$authParams = @{
URI = $oAuthTokenEndpoint
Method = 'POST'
ContentType = 'application/x-www-form-urlencoded'
Body = $authBody
}
$authResponseObject = Invoke-RestMethod @authParams -ErrorAction Stop
Extrair dados de uma tabela do Dataverse
Com o token de acesso em mãos, você pode fazer uma requisição GET à API do Dataverse para extrair os dados da tabela desejada.
$getDataRequestUri = 'zero_db';
$getApiCallParams = @{
URI = "$($PowerPlatformEnvironmentUrl)/api/data/v9.1/$($getDataRequestUri)"
Headers = @{
"Authorization" = "$($authResponseObject.token_type) $($authResponseObject.access_token)"
"Accept" = "application/json"
"OData-MaxVersion" = "4.0"
"OData-Version" = "4.0"
}
Method = 'GET'
}
$getApiResponseObject = Invoke-RestMethod @getApiCallParams -ErrorAction Stop
$getApiResponseObject.value | export-csv testing.csv
Armazenar o arquivo CSV no SharePoint
Por fim, conecte-se ao SharePoint e envie o arquivo CSV recém-gerado. O script também vai procurar e excluir arquivos com mais de 30 dias na biblioteca especificada.
$tenant='zerogap.onmicrosoft.com'
$SiteUrl='https://zerogap.sharepoint.com/sites/zerosite'
$LibraryName="Shared Documents/Dataverse Backup"
$NewFileName=Get-Date -Format "dddd_MM_dd_yyyy_HH_mm"
$NewFileName=$NewFileName.toString() + ".csv"
$null=Connect-PnPOnline -Url $SiteUrl -ManagedIdentity
Add-PnPFile -Path 'testing.csv' -Folder $LibraryName -NewFileName $NewFileName | Out-Null
$Files = Get-PnPFolderItem -FolderSiteRelativeUrl $LibraryName
$today_date=Get-Date
ForEach($File in $Files)
{
if (($today_date-$File.TimeLastModified).Days -ge 30) {
$Listid=Get-PnPListItem -List $LibraryName -UniqueId $File.UniqueId
Move-PnPListItemToRecycleBin -List $LibraryName -Identity $Listid.id -Force
}
}
Código completo
A seguir, o código completo do processo descrito acima:
# Set variables
$TenantId = 'xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' #Directory (tenant) ID
$AppId = 'xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' #Application (client) ID
$ClientSecret = Get-AutomationVariable -Name [Client Secret Variable Placeholder] #ClientSecretValue - Encrypted
$PowerPlatformOrg = '[OrgID Placeholder]' #OrgID
$PowerPlatformEnvironmentUrl = "https://$($PowerPlatformOrg).crm.dynamics.com"
$oAuthTokenEndpoint = "https://login.microsoftonline.com/$($TenantId)/oauth2/v2.0/token"
$authBody = @{
client_id = $AppId;
client_secret = $ClientSecret;
scope = "$($PowerPlatformEnvironmentUrl)/.default"
grant_type = 'client_credentials'
}
$authParams = @{
URI = $oAuthTokenEndpoint
Method = 'POST'
ContentType = 'application/x-www-form-urlencoded'
Body = $authBody
}
$authResponseObject = Invoke-RestMethod @authParams -ErrorAction Stop
$getDataRequestUri = 'zero_db';
$getApiCallParams = @{
URI = "$($PowerPlatformEnvironmentUrl)/api/data/v9.1/$($getDataRequestUri)"
Headers = @{
"Authorization" = "$($authResponseObject.token_type) $($authResponseObject.access_token)"
"Accept" = "application/json"
"OData-MaxVersion" = "4.0"
"OData-Version" = "4.0"
}
Method = 'GET'
}
$getApiResponseObject = Invoke-RestMethod @getApiCallParams -ErrorAction Stop
$getApiResponseObject.value | export-csv testing.csv
$tenant='zerogap.onmicrosoft.com'
$SiteUrl='https://zerogap.sharepoint.com/sites/zerosite'
$LibraryName="Shared Documents/Dataverse Backup"
$NewFileName=Get-Date -Format "dddd_MM_dd_yyyy_HH_mm"
$NewFileName=$NewFileName.toString() + ".csv"
$null=Connect-PnPOnline -Url $SiteUrl -ManagedIdentity
Add-PnPFile -Path 'testing.csv' -Folder $LibraryName -NewFileName $NewFileName | Out-Null
$Files = Get-PnPFolderItem -FolderSiteRelativeUrl $LibraryName
$today_date=Get-Date
ForEach($File in $Files)
{
if (($today_date-$File.TimeLastModified).Days -ge 30) {
$Listid=Get-PnPListItem -List $LibraryName -UniqueId $File.UniqueId
Move-PnPListItemToRecycleBin -List $LibraryName -Identity $Listid.id -Force
}
}
