Toegang tot het Power BI-activiteitenlogboek
Dit artikel is bedoeld voor Power BI-beheerders die gegevens uit het Power BI-activiteitenlogboek moeten openen en analyseren. Het is gericht op het programmatisch ophalen van Power BI-activiteiten met behulp van de cmdlet Get-PowerBIActivityEvent uit de Power BI-beheermodule. Er zijn maximaal 30 dagen geschiedenis beschikbaar. Deze cmdlet maakt gebruik van de Power BI REST API-bewerking ophalen , een beheer-API. PowerShell-cmdlets voegen een abstractielaag toe boven op de onderliggende API's. Daarom vereenvoudigt de PowerShell-cmdlet de toegang tot het Power BI-activiteitenlogboek.
Er zijn andere handmatige en programmatische manieren om Power BI-activiteiten op te halen. Zie de gebruikersactiviteitsgegevens van Access voor meer informatie.
Het analyseren van het Power BI-activiteitenlogboek is van cruciaal belang voor governance, naleving en om de implementatie-inspanningen bij te houden. Zie Gebruikersactiviteiten bijhouden in Power BI voor meer informatie over het Power BI-activiteitenlogboek.
Tip
U wordt aangeraden het artikel over controle op tenantniveau volledig te bekijken. In dit artikel worden plannings-, belangrijke beslissingen, vereisten en belangrijke activiteiten voor het ontwikkelen van oplossingen besproken die u moet overwegen bij het bouwen van een end-to-end-controleoplossing.
Beschikbare voorbeelden
Het doel van dit artikel is om u voorbeelden te geven om u op weg te helpen. De voorbeelden zijn scripts die gegevens ophalen uit het activiteitenlogboek met behulp van de Power BI Management PowerShell-module.
Waarschuwing
De scripts zijn niet gereed voor productie omdat ze alleen bedoeld zijn voor educatieve doeleinden. U kunt de scripts echter aanpassen voor productiedoeleinden door logica toe te voegen voor logboekregistratie, foutafhandeling, waarschuwingen en herstructureren voor hergebruik en modularisatie van code.
Omdat ze bedoeld zijn om te leren, zijn de voorbeelden simplistisch, maar ze zijn echt. We raden u aan alle voorbeelden te bekijken om te begrijpen hoe ze iets verschillende technieken toepassen. Zodra u het type activiteitsgegevens hebt geïdentificeerd dat u nodig hebt, kunt u de technieken combineren en afstemmen om een script te produceren dat het beste bij uw behoeften past.
Dit artikel bevat de volgende voorbeelden.
Voorbeeldnaam | Type activiteitsgegevens |
---|---|
Verifiëren met de Power BI-service | N.v.t. |
Alle activiteiten voor een gebruiker voor één dag weergeven | Alle |
Een activiteit voor N dagen weergeven | Rapport delen (koppeling of directe toegang) |
Drie activiteiten voor N dagen weergeven | App maken, app bijwerken en app installeren |
Alle activiteiten voor een werkruimte voor één dag weergeven | Alle |
Alle activiteiten voor de afgelopen N dagen exporteren | Alle |
Voor het gemak voeren de meeste voorbeelden hun resultaat naar het scherm uit. In Visual Studio Code worden de gegevens bijvoorbeeld uitgevoerd naar het terminalpaneel, dat een bufferset met gegevens in het geheugen bevat.
De meeste voorbeelden halen onbewerkte JSON-gegevens op. Het werken met de onbewerkte JSON-gegevens heeft veel voordelen.
- Alle informatie die beschikbaar is voor elke activiteitsgebeurtenis, wordt geretourneerd. Dat is handig voor u om te leren welke gegevens beschikbaar zijn. Houd er rekening mee dat de inhoud van een API-antwoord verschilt, afhankelijk van de werkelijke activiteitsevenement. De gegevens die beschikbaar zijn voor een CreateApp-gebeurtenis zijn bijvoorbeeld anders dan de ViewReport-gebeurtenis .
- Omdat gegevens die beschikbaar zijn in het activiteitenlogboek veranderen naarmate Power BI zich in de loop van de tijd ontwikkelt, kunt u verwachten dat de API-antwoorden ook veranderen. Op die manier worden nieuwe gegevens die worden geïntroduceerd, niet gemist. Uw proces is ook toleranter voor wijzigingen en zal minder waarschijnlijk mislukken.
- De details van een API-antwoord kunnen verschillen voor de commerciële Power BI-cloud en de nationale/regionale clouds.
- Als u verschillende teamleden (zoals data engineers) hebt die betrokken raken bij dit proces, vereenvoudigt u het eerste proces om de gegevens te extraheren, zodat meerdere teams gemakkelijker kunnen samenwerken.
Tip
U wordt aangeraden uw scripts te bewaren die gegevens zo eenvoudig mogelijk extraheren. Vermijd daarom het parseren, filteren of opmaken van de gegevens in het activiteitenlogboek terwijl deze worden geëxtraheerd. Deze benadering maakt gebruik van een ELT-methodologie , die afzonderlijke stappen bevat voor het extraheren, laden en transformeren van gegevens. Dit artikel is alleen gericht op de eerste stap, die betrekking heeft op het extraheren van de gegevens.
Vereisten
Als u de voorbeeldscripts wilt gebruiken, moet u voldoen aan de volgende vereisten.
- PowerShell-clienthulpprogramma: gebruik het hulpprogramma van uw voorkeur voor het uitvoeren van PowerShell-opdrachten. Alle voorbeelden zijn getest met behulp van de PowerShell-extensie voor Visual Studio Code met PowerShell 7. Zie Controle op tenantniveau voor informatie over clienthulpprogramma's en PowerShell-versies.
- Power BI-beheermodule: Installeer alle Power BI PowerShell-modules. Als u ze eerder hebt geïnstalleerd, raden we u aan de modules bij te werken om ervoor te zorgen dat u de meest recente gepubliceerde versie gebruikt.
- Infrastructuurbeheerdersrol: De voorbeeldscripts zijn ontworpen voor het gebruik van een interactieve verificatiestroom. Daarom moet de gebruiker die de PowerShell-voorbeeldscripts uitvoert zich aanmelden om de Power BI REST API's te gebruiken. Als u activiteitenlogboekgegevens wilt ophalen, moet de verificatiegebruiker deel uitmaken van de power BI-beheerdersrol (omdat het ophalen van activiteitsevenementen wordt uitgevoerd met een beheerders-API). Verificatie van service-principals valt buiten het bereik van deze leervoorbeelden.
De rest van dit artikel bevat voorbeeldscripts die u verschillende manieren laten zien om activiteitenlogboekgegevens op te halen.
Voorbeeld 1: Verifiëren met de Power BI-service
Voor alle Power BI REST API-bewerkingen moet u zich aanmelden. Verificatie (wie de aanvraag doet) en autorisatie (wat de gebruiker heeft machtigingen) worden beheerd door het Microsoft Identity Platform. In het volgende voorbeeld wordt de cmdlet Verbinding maken-PowerBIServiceAccount uit de Power BI-beheermodule gebruikt. Deze cmdlet ondersteunt een eenvoudige methode om u aan te melden.
Voorbeeldaanvraag 1
Met het eerste script wordt u omgeleid naar een browser om het aanmeldingsproces te voltooien. Gebruikersaccounts waarvoor meervoudige verificatie (MFA) is ingeschakeld, kunnen deze interactieve verificatiestroom gebruiken om u aan te melden.
Connect-PowerBIServiceAccount
Belangrijk
Gebruikers zonder Power BI-beheerdersbevoegdheden kunnen geen voorbeeldscripts uitvoeren die in dit artikel volgen. Power BI-beheerders zijn gemachtigd om de Power BI-service te beheren en om tenantbrede metagegevens (zoals activiteitenlogboekgegevens) op te halen. Hoewel het gebruik van service-principalverificatie buiten het bereik van deze voorbeelden valt, raden we u ten zeerste aan een service-principal in te stellen voor scripts die gereed zijn voor productie, zonder toezicht die volgens een schema worden uitgevoerd.
Meld u aan voordat u een van de volgende scripts uitvoert.
Voorbeeld 2: Alle activiteiten voor een gebruiker voor één dag weergeven
Soms moet u alle activiteiten controleren die een specifieke gebruiker op een specifieke dag heeft uitgevoerd.
Tip
Wanneer u gegevens uit het activiteitenlogboek extraheert met behulp van de PowerShell-cmdlet, kan elke aanvraag gegevens één dag extraheren (maximaal 24 uur). Daarom is het doel van dit voorbeeld om te beginnen door één gebruiker één dag te controleren. Verderop in dit artikel vindt u andere voorbeelden waarin wordt uitgelegd hoe u een lus gebruikt om gegevens meerdere dagen te exporteren.
Voorbeeldaanvraag 2
Dit script declareert twee PowerShell-variabelen om het script gemakkelijker te hergebruiken:
$UserEmailAddr
: Het e-mailadres voor de gebruiker waarin u geïnteresseerd bent.$ActivityDate
: De datum waarin u geïnteresseerd bent. De indeling is JJJJ-MM-DD (ISO 8601-indeling). U kunt geen datum aanvragen die ouder is dan 30 dagen vóór de huidige datum.
#Input values before running the script:
$UserEmailAddr = 'jordan@contoso.com'
$ActivityDate = '2023-03-15'
#----------------------------------------------------------------------
#View activity events:
Get-PowerBIActivityEvent `
-StartDateTime ($ActivityDate + 'T00:00:00.000') `
-EndDateTime ($ActivityDate + 'T23:59:59.999') `
-User $UserEmailAddr
Notitie
Mogelijk ziet u een backtick (') aan het einde van een aantal regels in de PowerShell-scripts. In PowerShell kunt u het backtick-teken op één manier gebruiken als een regelvervolgteken. We hebben dit gebruikt om de leesbaarheid van de scripts in dit artikel te verbeteren.
Tip
In het script correleren alle PowerShell-variabelen met een vereiste of optionele parameterwaarde in de cmdlet Get-PowerBIActivityEvent. De waarde die u aan de $UserEmailAddr
variabele toewijst, wordt bijvoorbeeld doorgegeven aan de -User
parameter. Het declareren van PowerShell-variabelen op deze manier is een lichtgewicht benadering om hardcoderingswaarden te voorkomen die in uw script kunnen worden gewijzigd. Dat is een goede gewoonte om te gebruiken en het zal nuttig zijn als uw scripts complexer worden. PowerShell-parameters zijn robuuster dan variabelen, maar ze vallen buiten het bereik van dit artikel.
Voorbeeldantwoord 2
Hier volgt een voorbeeld van een JSON-antwoord. Het omvat twee activiteiten die de gebruiker heeft uitgevoerd:
- De eerste activiteit laat zien dat een gebruiker een rapport heeft bekeken.
- De tweede activiteit laat zien dat een beheerder gegevens heeft geëxporteerd uit het Power BI-activiteitenlogboek.
[
{
"Id": "10af656b-b5a2-444c-bf67-509699896daf",
"RecordType": 20,
"CreationTime": "2023-03-15T15:18:30Z",
"Operation": "ViewReport",
"OrganizationId": "927c6607-8060-4f4a-a5f8-34964ac78d70",
"UserType": 0,
"UserKey": "100FFF92C7717B",
"Workload": "PowerBI",
"UserId": "jordan@contoso.com",
"ClientIP": "192.168.1.1",
"Activity": "ViewReport",
"ItemName": "Gross Margin Analysis",
"WorkSpaceName": "Sales Analytics",
"DatasetName": "Sales Data",
"ReportName": "Gross Margin Analysis",
"WorkspaceId": "e380d1d0-1fa6-460b-9a90-1a5c6b02414c",
"ObjectId": "Gross Margin Analysis",
"DatasetId": "cfafbeb1-8037-4d0c-896e-a46fb27ff229",
"ReportId": "94e57e92-Cee2-486d-8cc8-218c97200579",
"ArtifactId": "94e57e92-Cee2-486d-8cc8-218c97200579",
"ArtifactName": "Gross Margin Analysis",
"IsSuccess": true,
"ReportType": "PowerBIReport",
"RequestId": "53451b83-932b-f0b0-5328-197133f46fa4",
"ActivityId": "beb41a5d-45d4-99ee-0e1c-b99c451e9953",
"DistributionMethod": "Workspace",
"ConsumptionMethod": "Power BI Web",
"SensitivityLabelId": "e3dd4e72-5a5d-4a95-b8b0-a0b52b827793",
"ArtifactKind": "Report"
},
{
"Id": "5c913f29-502b-4a1a-a089-232edaf176f7",
"RecordType": 20,
"CreationTime": "2023-03-15T17:22:00Z",
"Operation": "ExportActivityEvents",
"OrganizationId": "927c6607-8060-4f4a-a5f8-34964ac78d70",
"UserType": 2,
"UserKey": "100FFF92C7717B",
"Workload": "PowerBI",
"UserId": "jordan@contoso.com",
"ClientIP": "192.168.1.1",
"UserAgent": "MicrosoftPowerBIMgmt/1.2.1111.0",
"Activity": "ExportActivityEvents",
"IsSuccess": true,
"RequestId": "2af6a22d-6f24-4dc4-a26a-5c234ab3afad",
"ActivityId": "00000000-0000-0000-0000-000000000000",
"ExportEventStartDateTimeParameter": "2023-03-17T00:00:00Z",
"ExportEventEndDateTimeParameter": "2023-03-17T23:59:59.999Z"
}
]
Tip
Het extraheren van de Power BI-activiteitenlogboekgegevens is ook een vastgelegde bewerking, zoals wordt weergegeven in het vorige antwoord. Wanneer u gebruikersactiviteiten analyseert, wilt u mogelijk beheerdersactiviteiten weglaten of afzonderlijk analyseren.
Voorbeeld 3: Een activiteit voor N dagen weergeven
Soms wilt u mogelijk één specifiek type activiteit voor een reeks dagen onderzoeken. In dit voorbeeld ziet u hoe u activiteiten voor het delen van rapporten per item kunt ophalen. Er wordt een lus gebruikt om activiteiten op te halen uit de afgelopen zeven dagen.
Voorbeeldaanvraag 3
Het script declareert twee variabelen:
$ActivityType
: De naam van de bewerking voor de activiteit die u onderzoekt.$NbrOfDaysToCheck
: Hoeveel dagen wilt u controleren. Er wordt een lus achterwaarts uitgevoerd vanaf de huidige dag. De toegestane maximumwaarde is 30 dagen (omdat de vroegste datum die u kunt ophalen 30 dagen vóór de huidige dag is).
#Input values before running the script:
$ActivityType = 'ShareReport'
$NbrOfDaysToCheck = 7
#-----------------------------------------------------------------------
#Use today to start counting back the number of days to check:
$DayUTC = (([datetime]::Today.ToUniversalTime()).Date)
#Iteratively loop through each of the last N days to view events:
For($LoopNbr=0; $LoopNbr -le $NbrOfDaysToCheck; $LoopNbr++)
{
$PeriodStart=$DayUTC.AddDays(-$LoopNbr)
$ActivityDate=$PeriodStart.ToString("yyyy-MM-dd")
Write-Verbose "Checking $ActivityDate" -Verbose
#Check activity events once per loop (once per day):
Get-PowerBIActivityEvent `
-StartDateTime ($ActivityDate + 'T00:00:00.000') `
-EndDateTime ($ActivityDate + 'T23:59:59.999') `
-ActivityType $ActivityType
}
Tip
U kunt deze lustechniek gebruiken om een van de bewerkingen te controleren die zijn vastgelegd in het activiteitenlogboek.
Voorbeeldantwoord 3
Hier volgt een voorbeeld van een JSON-antwoord. Het omvat twee activiteiten die de gebruiker heeft uitgevoerd:
- De eerste activiteit laat zien dat er een koppeling voor delen voor een gebruiker is gemaakt. Houd er rekening mee dat de SharingAction-waarde verschilt, afhankelijk van of de gebruiker een koppeling heeft gemaakt, een koppeling heeft bewerkt of een koppeling heeft verwijderd. Voor kortheid wordt slechts één type koppelingsactiviteit voor delen weergegeven in het antwoord.
- De tweede activiteit laat zien dat het delen van directe toegang voor een groep is gemaakt. Houd er rekening mee dat de waarde SharingInformation verschilt, afhankelijk van de actie die is ondernomen. Ter beknoptheid wordt slechts één type activiteit voor het delen van directe toegang weergegeven in het antwoord.
[
{
"Id": "be7506e1-2bde-4a4a-a210-bc9b156142c0",
"RecordType": 20,
"CreationTime": "2023-03-15T19:52:42Z",
"Operation": "ShareReport",
"OrganizationId": "927c6607-8060-4f4a-a5f8-34964ac78d70",
"UserType": 0,
"UserKey": "900GGG12D2242A",
"Workload": "PowerBI",
"UserId": "morgan@contoso.com",
"ClientIP": "192.168.1.1",
"UserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/110.0",
"Activity": "ShareReport",
"ItemName": "Call Center Stats",
"WorkSpaceName": "Sales Analytics",
"SharingInformation": [
{
"RecipientEmail": "ellis@contoso.com",
"RecipientName": "Turner",
"ObjectId": "fc9bbc6c-e39b-44cb-9c8a-d37d5665ec57",
"ResharePermission": "ReadReshare",
"UserPrincipalName": "ellis@contoso.com"
}
],
"WorkspaceId": "e380d1d0-1fa6-460b-9a90-1a5c6b02414c",
"ObjectId": "Call Center Stats",
"Datasets": [
{
"DatasetId": "fgagrwa3-9044-3e1e-228f-k24bf72gg995",
"DatasetName": "Call Center Data"
}
],
"ArtifactId": "81g22w11-vyy3-281h-1mn3-822a99921541",
"ArtifactName": "Call Center Stats",
"IsSuccess": true,
"RequestId": "7d55cdd3-ca3d-a911-5e2e-465ac84f7aa7",
"ActivityId": "4b8b53f1-b1f1-4e08-acdf-65f7d3c1f240",
"SharingAction": "CreateShareLink",
"ShareLinkId": "J_5UZg-36m",
"ArtifactKind": "Report",
"SharingScope": "Specific People"
},
{
"Id": "b4d567ac-7ec7-40e4-a048-25c98d9bc304",
"RecordType": 20,
"CreationTime": "2023-03-15T11:57:26Z",
"Operation": "ShareReport",
"OrganizationId": "927c6607-8060-4f4a-a5f8-34964ac78d70",
"UserType": 0,
"UserKey": "900GGG12D2242A",
"Workload": "PowerBI",
"UserId": "morgan@contoso.com",
"ClientIP": "69.132.26.0",
"UserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0",
"Activity": "ShareReport",
"ItemName": "Gross Margin Analysis",
"WorkSpaceName": "Sales Analytics",
"SharingInformation": [
{
"RecipientName": "SalesAndMarketingGroup-NorthAmerica",
"ObjectId": "ba21f28b-6226-4296-d341-f059257a06a7",
"ResharePermission": "Read"
}
],
"CapacityId": "1DB44EEW-6505-4A45-B215-101HBDAE6A3F",
"CapacityName": "Shared On Premium - Reserved",
"WorkspaceId": "e380d1d0-1fa6-460b-9a90-1a5c6b02414c",
"ObjectId": "Gross Margin Analysis",
"Datasets": [
{
"DatasetId": "cfafbeb1-8037-4d0c-896e-a46fb27ff229",
"DatasetName": "Sales Data"
}
],
"ArtifactId": "94e57e92-Cee2-486d-8cc8-218c97200579",
"ArtifactName": "Gross Margin Analysis",
"IsSuccess": true,
"RequestId": "82219e60-6af0-0fa9-8599-c77ed44fff9c",
"ActivityId": "1d21535a-257e-47b2-b9b2-4f875b19855e",
"SensitivityLabelId": "16c065f5-ba91-425e-8693-261e40ccdbef",
"SharingAction": "Direct",
"ArtifactKind": "Report",
"SharingScope": "Specific People"
}
]
Notitie
Dit JSON-antwoord laat zien dat de gegevensstructuur verschilt op basis van het type gebeurtenis. Zelfs hetzelfde type gebeurtenis kan verschillende kenmerken hebben die een iets andere uitvoer produceren. Zoals eerder in dit artikel wordt aanbevolen, moet u gewend zijn om de onbewerkte gegevens op te halen.
Voorbeeld 4: Drie activiteiten weergeven voor N dagen
Soms wilt u mogelijk verschillende gerelateerde activiteiten onderzoeken. In dit voorbeeld ziet u hoe u drie specifieke activiteiten voor de afgelopen zeven dagen ophaalt. Het richt zich op activiteiten met betrekking tot Power BI-apps , waaronder het maken van een app, het bijwerken van een app en het installeren van een app.
Voorbeeldaanvraag 4
Het script declareert de volgende variabelen:
$NbrOfDaysToCheck
: Hoeveel dagen wilt u controleren. Er wordt een lus uitgevoerd die vanaf de huidige dag achteruit werkt. De toegestane maximumwaarde is 30 dagen (omdat de vroegste datum die u kunt ophalen 30 dagen vóór de huidige dag is).$Activity1
: De naam van de bewerking voor de eerste activiteit die u onderzoekt. In dit voorbeeld wordt gezocht naar activiteiten voor het maken van Power BI-apps.$Activity2
: De naam van de tweede bewerking. In dit voorbeeld wordt gezocht naar updateactiviteiten voor Power BI-apps.$Activity3
: De naam van de derde bewerking. In dit voorbeeld wordt gezocht naar installatieactiviteiten van Power BI-apps.
U kunt alleen activiteitsevenementen voor één activiteit tegelijk ophalen. Het script zoekt dus afzonderlijk naar elke bewerking. De zoekresultaten worden gecombineerd in een variabele met de naam $FullResults
, die vervolgens naar het scherm wordt uitgevoerd.
Let op
Het uitvoeren van veel lussen verhoogt de kans op API-beperking aanzienlijk. Beperking kan optreden wanneer u het aantal aanvragen overschrijdt dat u in een bepaalde periode mag indienen. De bewerking Activiteitsactiviteiten ophalen is beperkt tot 200 aanvragen per uur. Wanneer u uw scripts ontwerpt, moet u ervoor zorgen dat u de oorspronkelijke gegevens niet vaker ophaalt dan u nodig hebt. Over het algemeen is het een betere gewoonte om alle onbewerkte gegevens één keer per dag te extraheren en die gegevens vervolgens afzonderlijk te doorzoeken, transformeren, filteren of op te maken.
Het script toont de resultaten voor de huidige dag.
Notitie
Als u alleen resultaten voor de vorige dag wilt ophalen ( resultaten van gedeeltelijke dagen vermijden) raadpleegt u het voorbeeld Alle activiteiten exporteren voor eerdere N-dagen .)
#Input values before running the script:
$NbrOfDaysToCheck = 7
$Activity1 = 'CreateApp'
$Activity2 = 'UpdateApp'
$Activity3 = 'InstallApp'
#-----------------------------------------------------------------------
#Initialize array which will contain the full resultset:
$FullResults = @()
#Use today to start counting back the number of days to check:
$DayUTC = (([datetime]::Today.ToUniversalTime()).Date)
#Iteratively loop through each day (<Initilize> ; <Condition> ; <Repeat>)
#Append each type of activity to an array:
For($LoopNbr=0; $LoopNbr -le $NbrOfDaysToCheck; $LoopNbr++)
{
$PeriodStart=$DayUTC.AddDays(-$LoopNbr)
$ActivityDate=$PeriodStart.ToString("yyyy-MM-dd")
Write-Verbose "Checking $ActivityDate" -Verbose
#Get activity 1 and append its results into the full resultset:
$Activity1Results = @()
$Activity1Results += Get-PowerBIActivityEvent `
-StartDateTime ($ActivityDate+'T00:00:00.000') `
-EndDateTime ($ActivityDate+'T23:59:59.999') `
-ActivityType $Activity1 | ConvertFrom-Json
If ($null -ne $Activity1Results) {$FullResults += $Activity1Results}
#Get activity 2 and append its results into the full resultset:
$Activity2Results = @()
$Activity2Results += Get-PowerBIActivityEvent `
-StartDateTime ($ActivityDate+'T00:00:00.000') `
-EndDateTime ($ActivityDate+'T23:59:59.999') `
-ActivityType $Activity2 |
ConvertFrom-Json
If ($null -ne $Activity2Results) {$FullResults += $Activity2Results}
#Get activity 3 and append its results into the full resultset:
$Activity3Results = @()
$Activity3Results += Get-PowerBIActivityEvent `
-StartDateTime ($ActivityDate+'T00:00:00.000') `
-EndDateTime ($ActivityDate+'T23:59:59.999') `
-ActivityType $Activity3 |
ConvertFrom-Json
If ($null -ne $Activity3Results) {$FullResults += $Activity3Results}
}
#Convert all of the results back to a well-formed JSON object:
$FullResults = $FullResults | ConvertTo-Json
#Display results on the screen:
$FullResults
Voorbeeldantwoord 4
Hier volgt een voorbeeld van een JSON-antwoord. Het omvat drie activiteiten die de gebruiker heeft uitgevoerd:
- De eerste activiteit toont dat er een Power BI-app is gemaakt.
- De tweede activiteit laat zien dat een Power BI-app is bijgewerkt.
- De derde activiteit laat zien dat een Power BI-app is geïnstalleerd door een gebruiker.
Waarschuwing
Het antwoord bevat alleen de gebruikersmachtigingen die zijn gewijzigd. Het is bijvoorbeeld mogelijk dat er drie doelgroepen zijn gemaakt in een CreateApp-gebeurtenis . Als er in de UpdateApp-gebeurtenis slechts één doelgroep is gewijzigd, wordt er slechts één doelgroep weergegeven in de OrgAppPermission-gegevens . Daarom is het vertrouwen op de UpdateApp-gebeurtenis voor het bijhouden van alle app-machtigingen onvolledig omdat in het activiteitenlogboek alleen wordt weergegeven wat er is gewijzigd.
Voor een momentopname van alle Power BI-app-machtigingen gebruikt u in plaats daarvan de app-gebruikers ophalen als Beheer API-bewerking.
[
{
"Id": "65a26480-981a-4905-b3aa-cbb3df11c7c2",
"RecordType": 20,
"CreationTime": "2023-03-15T18:42:13Z",
"Operation": "CreateApp",
"OrganizationId": "927c6607-8060-4f4a-a5f8-34964ac78d70",
"UserType": 0,
"UserKey": "100FFF92C7717B",
"Workload": "PowerBI",
"UserId": "jordan@contoso.com",
"ClientIP": "192.168.1.1",
"UserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0",
"Activity": "CreateApp",
"ItemName": "Sales Reconciliations App",
"WorkSpaceName": "Sales Reconciliations",
"OrgAppPermission": {
"recipients": "Sales Reconciliations App(Entire Organization)",
"permissions": "Sales Reconciliations App(Read,CopyOnWrite)"
},
"WorkspaceId": "9325a31d-067e-4748-a592-626d832c8001",
"ObjectId": "Sales Reconciliations App",
"IsSuccess": true,
"RequestId": "ab97a4f1-9f5e-4a6f-5d50-92c837635814",
"ActivityId": "9bb54a9d-b688-4028-958e-4d7d21ca903a",
"AppId": "42d60f97-0f69-470c-815f-60198956a7e2"
},
{
"Id": "a1dc6d26-b006-4727-bac6-69c765b7978f",
"RecordType": 20,
"CreationTime": "2023-03-16T18:39:58Z",
"Operation": "UpdateApp",
"OrganizationId": "927c6607-8060-4f4a-a5f8-34964ac78d70",
"UserType": 0,
"UserKey": "100GGG12F9921B",
"Workload": "PowerBI",
"UserId": "morgan@contoso.com",
"ClientIP": "192.168.1.1",
"UserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0",
"Activity": "UpdateApp",
"ItemName": "Sales Analytics",
"WorkSpaceName": "Sales Analytics",
"OrgAppPermission": {
"recipients": "Sales Reps Audience(SalesAndMarketingGroup-NorthAmerica,SalesAndMarketingGroup-Europe)",
"permissions": "Sales Reps Audience(Read,CopyOnWrite)"
},
"WorkspaceId": "c7bffcd8-8156-466a-a88f-0785de2c8b13",
"ObjectId": "Sales Analytics",
"IsSuccess": true,
"RequestId": "e886d122-2c09-4189-e12a-ef998268b864",
"ActivityId": "9bb54a9d-b688-4028-958e-4d7d21ca903a",
"AppId": "c03530c0-db34-4b66-97c7-34dd2bd590af"
},
{
"Id": "aa002302-313d-4786-900e-e68a6064df1a",
"RecordType": 20,
"CreationTime": "2023-03-17T18:35:22Z",
"Operation": "InstallApp",
"OrganizationId": "927c6607-8060-4f4a-a5f8-34964ac78d70",
"UserType": 0,
"UserKey": "100HHH12F4412A",
"Workload": "PowerBI",
"UserId": "ellis@contoso.com",
"ClientIP": "192.168.1.1",
"UserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0",
"Activity": "InstallApp",
"ItemName": "Sales Reconciliations App",
"ObjectId": "Sales Reconciliations App",
"IsSuccess": true,
"RequestId": "7b3cc968-883f-7e13-081d-88b13f6cfbd8",
"ActivityId": "9bb54a9d-b688-4028-958e-4d7d21ca903a"
}
]
Voorbeeld 5: Alle activiteiten voor een werkruimte voor één dag weergeven
Soms wilt u mogelijk activiteiten onderzoeken die betrekking hebben op een specifieke werkruimte. In dit voorbeeld worden alle activiteiten voor alle gebruikers één dag opgehaald. Vervolgens worden de resultaten gefilterd, zodat u zich kunt richten op het analyseren van activiteiten vanuit één werkruimte.
Voorbeeldaanvraag 5
Het script declareert twee variabelen:
$ActivityDate
: De datum waarin u geïnteresseerd bent. De notatie is JJJJ-MM-DD. U kunt geen datum aanvragen die ouder is dan 30 dagen vóór de huidige datum.$WorkspaceName
: De naam van de werkruimte waarin u geïnteresseerd bent.
Het script slaat de resultaten op in de $Results
variabele. Vervolgens worden de JSON-gegevens geconverteerd naar een object, zodat de resultaten kunnen worden geparseerd. Vervolgens worden de resultaten gefilterd om vijf specifieke kolommen op te halen. De naam van de creationTime-gegevens wordt gewijzigd als ActivityDateTime. De resultaten worden gefilterd op de naam van de werkruimte en vervolgens naar het scherm.
Er is geen parameter voor de Get-PowerBIActivityEvent-cmdlet waarmee u een werkruimte kunt opgeven bij het controleren van het activiteitenlogboek (in eerdere voorbeelden in dit artikel zijn PowerShell-parameters gebruikt om een specifieke gebruiker, datum of activiteitsnaam in te stellen). In dit voorbeeld haalt het script alle gegevens op en parseert het JSON-antwoord om de resultaten voor een specifieke werkruimte te filteren.
Let op
Als u zich in een grote organisatie bevindt die honderden of duizenden activiteiten per dag heeft, kan het filteren van de resultaten nadat ze zijn opgehaald, zeer inefficiënt zijn. Houd er rekening mee dat de bewerking Get Activity Events beperkt is tot 200 aanvragen per uur.
Als u API-beperking wilt voorkomen (wanneer u het aantal aanvragen overschrijdt dat u in een bepaalde periode mag doen), haalt u de oorspronkelijke gegevens niet meer op dan u nodig hebt. U kunt blijven werken met de gefilterde resultaten zonder het script uit te voeren om de resultaten opnieuw op te halen. Voor doorlopende behoeften is het een betere gewoonte om alle gegevens één keer per dag te extraheren en er vervolgens vaak query's op uit te voeren.
#Input values before running the script:
$ActivityDate = '2023-03-22'
$WorkspaceName = 'Sales Analytics'
#----------------------------------------------------------------------
#Run cmdlet to check activity events and store intermediate results:
$Events = Get-PowerBIActivityEvent `
-StartDateTime ($ActivityDate+'T00:00:00.000') `
-EndDateTime ($ActivityDate+'T23:59:59.999')
#Convert from JSON so we can parse the data:
$ConvertedResults = $Events | ConvertFrom-Json
#Obtain specific attributes and save to a PowerShell object:
$FilteredResults = $ConvertedResults `
|
Select-Object `
@{Name="ActivityDateTime";Expression={$PSItem.CreationTime}}, ` #alias name
Activity, `
UserId, `
ArtifactName, `
WorkspaceName `
|
#Filter the results:
Where-Object {($PSItem.WorkspaceName -eq $WorkspaceName)}
#View the filtered results:
$FilteredResults
#Optional - Save back to JSON format:
#$FilteredResults = $FilteredResults | ConvertTo-Json -Depth 10
#$FilteredResults
Voorbeeldantwoord 5
Dit zijn de gefilterde resultaten, waaronder een kleine subset eigenschappen. De indeling is gemakkelijker te lezen voor incidentele analyses. We raden u echter aan deze weer te converteren naar JSON-indeling als u van plan bent de resultaten op te slaan.
Notitie
Nadat de JSON-resultaten zijn geconverteerd naar een PowerShell-object, worden tijdwaarden geconverteerd naar lokale tijd. De oorspronkelijke controlegegevens worden altijd vastgelegd in UTC-tijd (Coordinated Universal Time), dus we raden u aan om alleen UTC-tijd te gebruiken.
ActivityDateTime : 4/25/2023 3:18:30 PM
Activity : ViewReport
UserId : jordan@contoso.com
ArtifactName : Gross Margin Analysis
WorkSpaceName : Sales Analytics
CreationTime : 4/25/2023 5:32:10 PM
Activity : ShareReport
UserId : ellis@contoso.com
ArtifactName : Call Center Stats
WorkSpaceName : Sales Analytics
CreationTime : 4/25/2023 9:03:05 PM
Activity : ViewReport
UserId : morgan@contoso.com
ArtifactName : Call Center Stats
WorkSpaceName : Sales Analytics
Tip
U kunt deze techniek gebruiken om resultaten te filteren op elke eigenschap in de resultaten. U kunt bijvoorbeeld een specifieke gebeurtenis gebruiken om slechts één specifieke gebeurtenis RequestId
te analyseren.
Voorbeeld 6: Alle activiteiten exporteren voor eerdere N dagen
Soms wilt u mogelijk alle activiteitsgegevens exporteren naar een bestand, zodat u met de gegevens buiten PowerShell kunt werken. In dit voorbeeld worden alle activiteiten voor alle gebruikers maximaal 30 dagen opgehaald. De gegevens worden geëxporteerd naar één JSON-bestand per dag.
Belangrijk
Gegevens van activiteitenlogboeken zijn maximaal 30 dagen beschikbaar. Het is belangrijk dat u de gegevens exporteert en bewaart, zodat u historische analyses kunt uitvoeren. Als u momenteel de gegevens van het activiteitenlogboek niet exporteert en opslaat, wordt u ten zeerste aangeraden dit te doen.
Voorbeeldaanvraag 6
Met het script worden alle activiteiten gedurende een reeks dagen opgehaald. Er worden drie variabelen gede declareert:
$NbrDaysDaysToExtract
: Hoeveel dagen wilt u exporteren. Het voert een lus uit en werkt terug vanaf de vorige dag. De toegestane maximumwaarde is 30 dagen (omdat de vroegste datum die u kunt ophalen 30 dagen vóór de huidige dag is).$ExportFileLocation
: het mappad waar u de bestanden wilt opslaan. De map moet bestaan voordat het script wordt uitgevoerd. Voeg geen backslashteken (\) toe aan het einde van het mappad (omdat het automatisch wordt toegevoegd tijdens runtime). U wordt aangeraden een afzonderlijke map te gebruiken om onbewerkte gegevensbestanden op te slaan.$ExportFileName
: het voorvoegsel voor elke bestandsnaam. Omdat er één bestand per dag wordt opgeslagen, voegt het script een achtervoegsel toe om de gegevens in het bestand aan te geven en de datum en tijd waarop de gegevens zijn opgehaald. Als u bijvoorbeeld om 9:00 uur (UTC) op 25 april 2023 een script hebt uitgevoerd om activiteitsgegevens op te halen voor 23 april 2023, is de bestandsnaam: PBIActivityEvents-20230423-202304250900. Hoewel de mapstructuur waarin deze is opgeslagen nuttig is, moet elke bestandsnaam volledig zelf worden beschreven.
U wordt aangeraden gegevens te extraheren die ten minste één dag vóór de huidige dag zijn. Op die manier vermijdt u het ophalen van gebeurtenissen van gedeeltelijke dagen en kunt u er zeker van zijn dat elk exportbestand de volledige 24 uur aan gegevens bevat.
Het script verzamelt maximaal 30 dagen aan gegevens tot de vorige dag. Tijdstempels voor gecontroleerde gebeurtenissen bevinden zich altijd in UTC. U wordt aangeraden al uw controleprocessen te bouwen op basis van UTC-tijd in plaats van uw lokale tijd.
Het script produceert één JSON-bestand per dag. Het achtervoegsel van de bestandsnaam bevat de tijdstempel (in UTC-indeling) van de geëxtraheerde gegevens. Als u dezelfde dag met gegevens meer dan één keer extraheert, helpt het achtervoegsel in de bestandsnaam u bij het identificeren van het nieuwere bestand.
#Input values before running the script:
$NbrDaysDaysToExtract = 7
$ExportFileLocation = 'C:\Power-BI-Raw-Data\Activity-Log'
$ExportFileName = 'PBIActivityEvents'
#--------------------------------------------
#Start with yesterday for counting back to ensure full day results are obtained:
[datetime]$DayUTC = (([datetime]::Today.ToUniversalTime()).Date).AddDays(-1)
#Suffix for file name so we know when it was written:
[string]$DateTimeFileWrittenUTCLabel = ([datetime]::Now.ToUniversalTime()).ToString("yyyyMMddHHmm")
#Loop through each of the days to be extracted (<Initilize> ; <Condition> ; <Repeat>)
For($LoopNbr=0 ; $LoopNbr -lt $NbrDaysDaysToExtract ; $LoopNbr++)
{
[datetime]$DateToExtractUTC=$DayUTC.AddDays(-$LoopNbr).ToString("yyyy-MM-dd")
[string]$DateToExtractLabel=$DateToExtractUTC.ToString("yyyy-MM-dd")
#Create full file name:
[string]$FullExportFileName = $ExportFileName `
+ '-' + ($DateToExtractLabel -replace '-', '') `
+ '-' + $DateTimeFileWrittenUTCLabel `
+ '.json'
#Obtain activity events and store intermediary results:
[psobject]$Events=Get-PowerBIActivityEvent `
-StartDateTime ($DateToExtractLabel+'T00:00:00.000') `
-EndDateTime ($DateToExtractLabel+'T23:59:59.999')
#Write one file per day:
$Events | Out-File "$ExportFileLocation\$FullExportFileName"
Write-Verbose "File written: $FullExportFileName" -Verbose
}
Write-Verbose "Extract of Power BI activity events is complete." -Verbose
Er zijn verschillende voordelen voor het gebruik van de Get-PowerBIActivityEvent PowerShell-cmdlet in plaats van de REST API-bewerking Voor get-activiteitsgebeurtenissen .
- Met de cmdlet kunt u een dag van activiteit aanvragen telkens wanneer u een aanroep doet met behulp van de cmdlet. Terwijl u rechtstreeks met de API communiceert, kunt u slechts één uur per API-aanvraag aanvragen.
- De cmdlet verwerkt vervolgtokens voor u. Als u de API rechtstreeks gebruikt, moet u het vervolgtoken controleren om te bepalen of er meer resultaten moeten komen. Sommige API's moeten paginerings- en vervolgtokens gebruiken om prestatieredenen wanneer ze een grote hoeveelheid gegevens retourneren. Ze retourneren de eerste set records en vervolgens met een vervolgtoken kunt u een volgende API-aanroep maken om de volgende set records op te halen. U blijft de API aanroepen totdat er geen vervolgtoken wordt geretourneerd. Het gebruik van het vervolgtoken is een manier om meerdere API-aanvragen samen te voegen, zodat u een logische set resultaten kunt samenvoegen. Zie REST API voor activiteitsevenementen voor een voorbeeld van het gebruik van een vervolgtoken.
- De cmdlet verwerkt microsoft Entra ID (voorheen bekend als Azure Active Directory) toegangstoken verloopt voor u. Nadat u bent geverifieerd, verloopt uw toegangstoken na één uur (standaard). In dit geval vraagt de cmdlet automatisch een vernieuwingstoken voor u aan. Als u rechtstreeks met de API communiceert, moet u een vernieuwingstoken aanvragen.
Zie API's of PowerShell-cmdlets kiezen voor meer informatie.
Notitie
Een voorbeeldantwoord wordt weggelaten omdat dit een uitvoer is die vergelijkbaar is met de antwoorden die in de vorige voorbeelden worden weergegeven.
Gerelateerde inhoud
Raadpleeg de volgende bronnen voor meer informatie over dit artikel:
- Gebruikersactiviteiten bijhouden in Power BI
- Power BI-implementatieplanning: controle op tenantniveau
- Roadmap voor acceptatie van infrastructuur: controle en bewaking
- Vragen? Vraag het Power BI-community
- Suggesties? Ideeën bijdragen om Power BI te verbeteren