Utiliser PowerShell pour sauvegarder une table Dataverse
Traduit de l'original en espagnol. Lire en espagnol
Pour sauvegarder une table Dataverse et l’enregistrer comme fichier CSV dans SharePoint avec PowerShell, suivez les étapes ci-dessous. Ce tutoriel suppose que vous disposez des autorisations nécessaires et que vous avez correctement configuré les identifiants de l’application dans Azure AD afin qu’elle ait accès à la fois à Dataverse et à SharePoint.

Configurer les variables
Commencez par définir les variables qui contiennent les identifiants de votre application et les identifiants nécessaires à l’authentification.
# 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"
Demander le token d’accès
Pour interagir avec l’API Dataverse, vous avez besoin d’un token d’accès. Utilisez le bloc de code suivant pour l’obtenir.
$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
Extraire les données d’une table Dataverse
Une fois le token d’accès obtenu, vous pouvez envoyer une requête GET à l’API Dataverse pour extraire les données de la table souhaitée.
$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
Stocker le fichier CSV dans SharePoint
Enfin, connectez-vous à SharePoint et téléversez le fichier CSV qui vient d’être généré. Le script recherchera et supprimera aussi les fichiers de plus de 30 jours dans la bibliothèque indiquée.
$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
}
}
Code complet
Voici le code complet du processus décrit ci-dessus :
# 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
}
}
