Para realizar una copia de seguridad de una tabla de Dataverse y guardarla como un archivo CSV en SharePoint utilizando PowerShell, sigue los siguientes pasos. Este tutorial asume que tienes los permisos necesarios y que has configurado adecuadamente las credenciales de la aplicación en Azure AD para que tenga acceso tanto a Dataverse como a SharePoint.
Configurar variables
Primero, define las variables que contienen las credenciales de tu aplicación y los identificadores necesarios para la autenticación.
# 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 el Token de Acceso
Para interactuar con la API de Dataverse, necesitas un token de acceso. Utiliza el siguiente bloque de código para obtenerlo.
$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
Extraer datos de una tabla de Dataverse
Una vez que tienes el token de acceso, puedes realizar una solicitud GET a la API de Dataverse para extraer los datos de la tabla deseada.
$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
Almacenar el archivo CSV en SharePoint
Finalmente, conecta a SharePoint y sube el archivo CSV recién generado. También, el script buscará y eliminará archivos de más de 30 días de antigüedad en la 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 continuación, se presenta el código completo del proceso descrito anteriormente:
# 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
}
}
- ChromaDB + Autenticación y Colecciones - mayo 17, 2024
- PowerShell + REST APIs para monitorear el estado de MS Flows - mayo 17, 2024
- IA Agent - mayo 11, 2024