Prístup k denníku aktivity služby Power BI

Tento článok sa zameriava na správcov služby Power BI, ktorí potrebujú získať prístup k údajom, ktoré pochádzajú z denníka aktivity služby Power BI, a analyzovať ich. Zameriava sa na programové načítanie aktivít služby Power BI pomocou rutiny typu cmdlet Get-PowerBIActivityEvent z modulu správy služby Power BI. K dispozícii je až 30 dní histórie. Táto rutina typu cmdlet používa operáciu Načítať udalosti aktivít rozhrania REST API služby Power BI, ktorá je správcom rozhrania API. Rutiny typu cmdlet prostredia PowerShell pridávaujú vrstvu abstrakcie nad základné rozhrania API. Preto rutina typu cmdlet prostredia PowerShell zjednodušuje prístup k denníku aktivity služby Power BI.

Existujú aj iné manuálne a programové spôsoby načítania aktivít služby Power BI. Ďalšie informácie nájdete v téme Prístup k údajom o aktivite používateľa.

Analýza denníka aktivity služby Power BI je rozhodujúca pre riadenie, dodržiavanie súladu a sledovanie úsilia o prijatie . Ďalšie informácie o denníku aktivity služby Power BI nájdete v téme Sledovanie aktivít používateľa v službe Power BI.

Tip

Odporúča sa, aby ste si plne prečítali článok Auditovanie na úrovni nájomníka . Tento článok sa venuje plánovaniu, kľúčovým rozhodnutiam, predpokladom a kľúčovým aktivitám pri vývoji riešení, ktoré treba zvážiť pri vytváraní komplexného riešenia auditovania.

Dostupné príklady

Cieľom tohto článku je poskytnúť vám príklady, ktoré vám pomôžu začať. Príklady zahŕňajú skripty, ktoré načítavajú údaje z denníka aktivity pomocou modulu PowerShell správy služby Power BI.

Upozornenie

Skripty nie sú pripravené na produkciu, pretože sú určené len na vzdelávacie účely. Skripty však môžete prispôsobiť na produkčné účely pridaním logiky na zapisovanie do denníka, spracovanie chýb, upozornenie a refaktorovanie na opätovné použitie kódu a moduláciu.

Keďže sú určené na učenie, príklady sú zjednodušujúce, ale sú reálne. Odporúčame vám skontrolovať všetky príklady, aby ste pochopili, ako používajú mierne odlišné techniky. Po identifikácii typu potrebných údajov o aktivite môžete kombinovať a zhodovať sa s technikami, aby ste vytvorili skript, ktorý najlepšie vyhovuje vašim požiadavkám.

Tento článok obsahuje nasledujúce príklady.

Názov príkladu Typ údajov o aktivite
Overenie pomocou služba Power BI Nie je k dispozícii
Zobrazenie všetkých aktivít používateľa na jeden deň Všetko
Zobrazenie aktivity pre N dní Zdieľanie zostavy (prepojenie alebo priamy prístup)
Zobrazenie troch aktivít pre N dní Vytvorenie aplikácie, aktualizácia aplikácie a inštalácia aplikácie
Zobrazenie všetkých aktivít pracovného priestoru na jeden deň Všetko
Exportovať všetky aktivity za predchádzajúcich N dní Všetko

Pre jednoduchosť je výstupom väčšiny príkladov ich výsledok na obrazovke. Napríklad v programe Visual Studio Code sú údaje výstupom na terminálovom paneli, ktorý obsahuje množinu údajov z medzipamäte.

Väčšina príkladov načíta nespracované údaje JSON. Práca s nespracovanými údajmi JSON má mnoho výhod.

  • Vrátia sa všetky informácie, ktoré sú k dispozícii pre každú udalosť aktivity. Je to užitočné, ak chcete zistiť, aké údaje sú k dispozícii. Majte na pamäti, že obsah odpovede rozhrania API sa líši v závislosti od skutočnej udalosti aktivity. Údaje, ktoré sú k dispozícii napríklad pre udalosť CreateApp , sa líšia od udalosti ViewReport .
  • Keďže údaje, ktoré sú k dispozícii v denníku aktivity sa menia pri vývoji služby Power BI v priebehu času, môžete očakávať, že odpovede rozhrania API sa zmenia tiež. Takto budú vzniknuté nové údaje chýbať. Váš proces je tiež odolnejší na zmenu a s menšou pravdepodobnosťou zlyhá.
  • Podrobnosti odpovede rozhrania API sa môžu líšiť v prípade komerčného cloudu služby Power BI a národných/regionálnych cloudov.
  • Ak máte rôznych členov tímu (napríklad dátových inžinierov), ktorí sa tohto procesu zapoja, zjednodušenie počiatočného procesu extrahovania údajov uľahčuje spolupráca viacerých tímov.

Tip

Odporúčame vám ponechať skripty, ktoré extrahujú údaje čo najjednoduchšie. Preto sa vyhnite analyzovaniu, filtrovaniu alebo formátovaniu údajov denníka aktivity počas ich extrahovania. Tento prístup používa metodológiu ELT , ktorá obsahuje samostatné kroky na extrahovanie, načítanie a transformáciu údajov. Tento článok sa zameriava len na prvý krok, ktorý sa týka extrahovania údajov.

Požiadavky

Ak chcete použiť vzorové skripty, musíte spĺňať nasledujúce požiadavky.

  • Nástroj klienta PowerShell: Použite preferovaný nástroj na spustenie príkazov prostredia PowerShell. Všetky príklady boli testované použitím rozšírenia Prostredia PowerShell pre Visual Studio Code s prostredím PowerShell 7. Informácie o klientskych nástrojoch a verziách prostredia PowerShell nájdete v téme Auditovanie na úrovni nájomníka.
  • Modul Správa služby Power BI: Nainštalujte všetky moduly prostredia PowerShell služby Power BI. Ak ste ich predtým nainštalovali, odporúčame aktualizovať moduly, aby ste sa uistili, že používate najnovšiu publikovanú verziu.
  • Rola správcu tkaniny: Ukážkové skripty sú navrhnuté tak, aby používali interaktívny postup overovania. Používateľ, ktorý spúšťa vzorové skripty prostredia PowerShell, sa preto musí prihlásiť, aby používal rozhrania REST API služby Power BI. Na načítanie údajov denníka aktivity musí overujúci používateľ patriť do roly správcu služby Power BI (pretože načítavanie udalostí aktivity sa vykonáva pomocou rozhrania API správcu). Overovanie objektom služby nie je súčasťou rozsahu týchto príkladov učenia.

Zvyšok tohto článku obsahuje ukážkové skripty, ktoré zobrazujú rôzne spôsoby načítania údajov denníka aktivity.

Príklad 1: Overenie pomocou služba Power BI

Všetky operácie rozhrania REST API služby Power BI vyžadujú prihlásenie. Overovanie (kto žiada) a oprávnenie (na čo má používateľ povolenie) je spravované platformou identity Microsoft. V nasledujúcom príklade sa používa rutina typu cmdlet Pripojenie-PowerBIServiceAccount z modulu spravovanie služby Power BI. Táto rutina typu cmdlet podporuje jednoduchý spôsob prihlásenia.

Vzorová požiadavka 1

Prvý skript vás presmeruje na prehliadač na dokončenie procesu prihlasovania. Používateľské kontá, ktoré majú povolené viacfaktorové overovanie (MFA), môžu na prihlásenie využiť tento interaktívny postup overenia.

Connect-PowerBIServiceAccount

Dôležité

Používatelia bez oprávnení správcu služby Power BI nemôžu spúšťať žiadne vzorové skripty, ktoré sú uvedené v tomto článku. Správcovia služby Power BI majú povolenie spravovať služba Power BI a načítať metaúdaje platné pre celého nájomníka (napríklad údaje denníka aktivity). Hoci používanie overovania objektom služby nie je pre tieto príklady obmedzené, dôrazne odporúčame nastaviť objekt služby pre skripty pripravené na produkciu, ktoré sa spustia podľa plánu.

Pred spustením niektorého z nasledujúcich skriptov sa nezabudnite prihlásiť.

Príklad č. 2: Zobrazenie všetkých aktivít používateľa na jeden deň

Niekedy je potrebné skontrolovať všetky aktivity, ktoré konkrétny používateľ vykonal v konkrétny deň.

Tip

Pri extrahovaní údajov z denníka aktivity pomocou rutiny typu cmdlet prostredia PowerShell môže každá požiadavka extrahovať údaje za jeden deň (maximálne 24 hodín). Cieľom tohto príkladu je preto začať jednoduchým zakontrolovaním jedného používateľa na jeden deň. Neskôr v tomto článku sú uvedené aj ďalšie príklady, ktoré vám ukážu, ako použiť slučku na export údajov pre viacero dní.

Vzorová požiadavka 2

Tento skript deklaruje dve premenné prostredia PowerShell, aby bolo jednoduchšie použiť skript:

  • $UserEmailAddr: E-mailová adresa používateľa, ktorý vás zaujíma.
  • $ActivityDate: Dátum, ktorý vás zaujíma. Formát je RRRR-MM-DD (formát ISO 8601). O dátum nie je možné požiadať skôr ako 30 dní pred aktuálnym dátumom.
#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

Poznámka

Na konci niektorých riadkov v skriptoch prostredia PowerShell si môžete všimnúť znak opačného apostrofu ('). V prostredí PowerShell môžete znak opačného apostrofa použiť napríklad ako znak pokračovania. Použili sme ho na zlepšenie čitateľnosti skriptov v tomto článku.

Tip

V skripte všetky premenné prostredia PowerShell súvisia s požadovanou alebo voliteľnou hodnotou parametra v rutine typu cmdlet Get-PowerBIActivityEvent . Do parametra sa odovzdá napríklad hodnota, ktorú k premennej $UserEmailAddr-User priradíte. Deklarovanie premenných prostredia PowerShell týmto spôsobom je ľahký prístup, aby sa predišlo naprogramovaniu hodnôt, ktoré by sa mohli zmeniť vo vašom skripte. To je dobrý zvyk prijímať, a to bude užitočné, ako vaše skripty sa stávajú zložitejšie. Parametre prostredia PowerShell sú robustnejšie ako premenné, ale nie sú súčasťou tohto článku.

Vzorová odpoveď 2

Tu je vzorová odpoveď JSON. Patria sem dve aktivity, ktoré používateľ vykonal:

  • Prvá aktivita ukazuje, že používateľ si zobrazil zostavu.
  • Druhá aktivita ukazuje, že správca exportoval údaje z denníka aktivity služby Power BI.
[
  {
    "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

Extrahovanie údajov denníka aktivity služby Power BI je tiež zaznamenávanou operáciou, ako je to znázornené v predchádzajúcej odpovedi. Pri analýze aktivít používateľa možno budete chcieť vynechať aktivity správcu alebo ich analyzovať samostatne.

Príklad 3: Zobrazenie aktivity pre N dní

Niekedy možno budete chcieť preskúmať jeden konkrétny typ aktivity pre rad dní. Tento príklad ukazuje, ako načítať aktivity zdieľania zostáv podľa položiek. Používa slučku na načítanie aktivít z predchádzajúcich siedmich dní.

Vzorová požiadavka 3

Skript deklaruje dve premenné:

  • $ActivityType: Názov operácie, ktorú skúmate.
  • $NbrOfDaysToCheck: Koľko dní máte záujem kontrolovať. Vykoná slučku, ktorá funguje spätne od aktuálneho dňa. Maximálna povolená hodnota je 30 dní (pretože najskorší dátum, ktorý môžete načítať, je 30 dní pred aktuálnym dňom).
#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

Túto metódu slučiek môžete použiť na kontrolu všetkých operácií zaznamenaných v denníku aktivity.

Vzorová odpoveď 3

Tu je vzorová odpoveď JSON. Patria sem dve aktivity, ktoré používateľ vykonal:

  • Prvá aktivita ukazuje, že prepojenie na zdieľanie pre používateľa bolo vytvorené. Všimnite si, že hodnota sharingAction sa líši v závislosti od toho, či používateľ vytvoril prepojenie, upravil prepojenie alebo odstránil prepojenie. Pre stručnosť sa v odpovedi zobrazí iba jeden typ aktivity prepojenia na zdieľanie.
  • Druhá aktivita ukazuje, že zdieľanie priameho prístupu pre skupinu bolo vytvorené. Všimnite si, že hodnota SharingInformation sa líši v závislosti od prijatej akcie. Pre stručnosť sa v odpovedi zobrazuje iba jeden typ aktivity zdieľania priameho prístupu.
[
  {
    "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"
  }
]

Poznámka

Táto odpoveď JSON ukazuje, že štruktúra údajov sa líši v závislosti od typu udalosti. Dokonca aj ten istý typ udalosti môže mať rôzne vlastnosti, ktoré produkujú mierne odlišný výstup. Ako už bolo uvedené vyššie v tomto článku, mali by ste si zvyknúť na načítanie nespracovaných údajov.

Príklad 4: Zobrazenie troch aktivít pre N dní

Niekedy možno budete chcieť preskúmať niekoľko súvisiacich aktivít. Tento príklad ukazuje, ako načítať tri konkrétne aktivity za predchádzajúcich sedem dní. Zameriava sa na aktivity súvisiace s aplikáciami služby Power BI vrátane vytvorenia aplikácie, aktualizácie aplikácie a inštalácie aplikácie.

Vzorová požiadavka 4

Skript deklaruje nasledujúce premenné:

  • $NbrOfDaysToCheck: Koľko dní máte záujem kontrolovať. Vykoná slučku, ktorá funguje spätne od aktuálneho dňa. Maximálna povolená hodnota je 30 dní (pretože najskorší dátum, ktorý môžete načítať, je 30 dní pred aktuálnym dňom).
  • $Activity1: Názov operácie prvej aktivity, ktorú skúmate. V tomto príklade hľadá aktivity vytvárania aplikácie v službe Power BI.
  • $Activity2: Druhý názov operácie. V tomto príklade sa vyhľadávajú aktivity aktualizácie aplikácie Power BI.
  • $Activity3: Názov tretej operácie. V tomto príklade sa vyhľadávajú inštalačné aktivity aplikácie Power BI.

Udalosti aktivity môžete načítať len za jednu aktivitu súčasne. Takže skript vyhľadá každú operáciu samostatne. Skombinuje výsledky vyhľadávania do premennej s názvom $FullResults, ktorá potom vytvorí výstup na obrazovku.

Výstraha

Spúšťanie mnohých slučiek mnohokrát výrazne zvyšuje pravdepodobnosť obmedzenia rozhrania API. Obmedzenie môže nastať vtedy, keď prekročíte počet žiadostí, ktoré máte povolené v danom časovom období. Operácia Získať udalosti aktivity je obmedzená na 200 žiadostí za hodinu. Pri navrhovaní skriptov dbajte, aby ste pôvodné údaje nenačítania načítali viackrát, ako potrebujete. Vo všeobecnosti je vhodnejšie extrahovať všetky nespracované údaje raz za deň a potom tieto údaje dotazovať, transformovať, filtrovať alebo formátovať samostatne.

Skript zobrazuje výsledky pre aktuálny deň.

Poznámka

Ak chcete načítať výsledky len za predchádzajúci deň – vyhnúť sa čiastočným výsledkom dňa – pozrite si príklad Exportovať všetky aktivity pre predchádzajúcich N dní .)

#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

Vzorová odpoveď 4

Tu je vzorová odpoveď JSON. Zahŕňa tri aktivity, ktoré používateľ vykonal:

  • Prvá aktivita ukazuje, že aplikácia služby Power BI bola vytvorená.
  • Druhá aktivita ukazuje, že aplikácia služby Power BI bola aktualizovaná.
  • Tretia aktivita ukazuje, že aplikáciu služby Power BI nainštaloval používateľ.

Upozornenie

Odpoveď zahŕňa iba povolenia používateľa, ktoré boli upravené. Je napríklad možné, že počas udalosti CreateApp mohli byť vytvorené tri cieľové skupiny. Ak by sa v udalosti UpdateApp zmenila len jedna cieľová skupina, v údajoch OrgAppPermission by sa zobrazila len jedna cieľová skupina. Preto je spoliehanie sa na udalosť UpdateApp na sledovanie všetkých povolení aplikácie neúplné, pretože denník aktivity zobrazuje len to, čo sa zmenilo.

Na snímku všetkých povolení aplikácie Power BI použite operáciu Získať používateľov aplikácie ako Spravovanie rozhranie API.

[
  {
    "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"
  }
]

Príklad č. 5: Zobrazenie všetkých aktivít pracovného priestoru na jeden deň

Niekedy možno budete chcieť preskúmať aktivity súvisiace s konkrétnym pracovným priestorom. Tento príklad načíta všetky aktivity pre všetkých používateľov za jeden deň. Výsledky potom vyfiltruje, aby ste sa mohli zamerať na analýzu aktivít z jedného pracovného priestoru.

Vzorová požiadavka 5

Skript deklaruje dve premenné:

  • $ActivityDate: Dátum, ktorý vás zaujíma. Formát je RRRR-MM-DD. O dátum nie je možné požiadať skôr ako 30 dní pred aktuálnym dátumom.
  • $WorkspaceName: Názov pracovného priestoru, ktorý vás zaujíma.

Skript ukladá výsledky do premennej $Results . Potom skonvertuje údaje JSON na objekt, aby sa výsledky mohli analyzovať. Výsledky potom vyfiltruje a načíta päť konkrétnych stĺpcov. Údaje creationtime sa premenujú na ActivityDateTime. Výsledky sú filtrované podľa názvu pracovného priestoru a potom výstup na obrazovku.

Neexistuje parameter pre rutinu typu cmdlet Get-PowerBIActivityEvent , ktorý vám umožňuje zadať pracovný priestor pri kontrole denníka aktivity (vyššie príklady v tomto článku použili parametre prostredia PowerShell na nastavenie konkrétneho používateľa, dátumu alebo názvu aktivity). V tomto príklade skript načíta všetky údaje a potom analyzuje odpoveď JSON, aby filtrovať výsledky pre konkrétny pracovný priestor.

Výstraha

Ak ste vo veľkej organizácii, ktorá má stovky alebo tisíce aktivít denne, filtrovanie výsledkov po ich načítaní môže byť veľmi neefektívne. Nezabudnite, že operácia Načítať udalosti aktivity je obmedzená na 200 požiadaviek za hodinu.

Ak sa chcete vyhnúť obmedzovaniu rozhrania API (v prípade, že prekročíte počet požiadaviek, ktoré máte povolené v určitom časovom období), nenačítavajte pôvodné údaje viac, ako potrebujete. Môžete pokračovať v práci s filtrovanými výsledkami bez spustenia skriptu na opätovné načítanie výsledkov. Pre prebiehajúce potreby je lepšou praxou extrahovať všetky údaje raz za deň a potom ich dotazovať mnohokrát.

#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

Vzorová odpoveď 5

Tu sú filtrované výsledky, ktoré zahŕňajú malú podmnožinu vlastností. Formát sa pri príležitostnej analýze ľahšie číta. Ak však plánujete výsledky uložiť, odporúčame ich skonvertovať späť na formát JSON.

Poznámka

Po konverzii výsledkov JSON na objekt prostredia PowerShell sa hodnoty času skonvertujú na miestny čas. Pôvodné údaje auditu sa vždy zaznamenávajú v koordinovanom svetový čas (UTC), preto odporúčame, aby ste si zvykli používať iba UTC čas.

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

Túto metódu môžete použiť na filtrovanie výsledkov podľa ľubovoľnej vlastnosti vo výsledkoch. Môžete napríklad použiť konkrétnu udalosť RequestId na analýzu len jednej konkrétnej udalosti.

Príklad 6: Export všetkých aktivít pre predchádzajúcich N dní

Niekedy možno budete chcieť exportovať všetky údaje o aktivite do súboru, aby ste mohli pracovať s údajmi mimo prostredia PowerShell. V tomto príklade sa načítajú všetky aktivity pre všetkých používateľov do 30 dní. Exportuje údaje do jedného súboru JSON za deň.

Dôležité

Údaje denníka aktivity sú k dispozícii maximálne 30 dní. Je dôležité exportovať a uchovávať údaje, aby ste mohli vykonávať historické analýzy. Ak momentálne neexportujete a neukladáte údaje denníka aktivity, dôrazne vám odporúčame, aby ste si pred tým dali prednosť.

Vzorová požiadavka 6

Skript načíta všetky aktivity pre rad dní. Deklaruje tri premenné:

  • $NbrDaysDaysToExtract: Koľko dní máte záujem o exportovanie. Vykoná slučku, ktorá funguje spätne od predchádzajúceho dňa. Maximálna povolená hodnota je 30 dní (pretože najskorší dátum, ktorý môžete načítať, je 30 dní pred aktuálnym dňom).
  • $ExportFileLocation: Cesta k priečinku, kam chcete uložiť súbory. Priečinok musí existovať pred spustením skriptu. Na konci cesty k priečinku nedávajte znak opačnej lomky (\) (pretože sa automaticky pridá v režime runtime). Odporúčame, aby ste na ukladanie nespracovaných údajových súborov použili samostatný priečinok.
  • $ExportFileName: Predpona každého názvu súboru. Keďže sa uloží jeden súbor za deň, skript pridá príponu na označenie údajov obsiahnutých v súbore a dátum a čas načítania údajov. Ak ste napríklad 25. apríla 2023 spustili skript o 9:00 (UTC) na extrahovanie údajov o aktivite pre 23. apríla 2023, názov súboru by bol: PBIActivityEvents-20230423-202304250900. Napriek tomu, že štruktúra priečinkov, v ktorej je uložená, je užitočná, každý názov súboru by mal byť plne popisný.

Odporúčame extrahovať údaje, ktoré sú aspoň jeden deň pred aktuálnym dňom. Týmto spôsobom sa vyhnete načítaniu čiastočných udalostí a máte istotu, že každý súbor exportu obsahuje celých 24 hodín údajov.

Skript zhromaždí až 30 dní údajov do predchádzajúceho dňa. Časové pečiatky pre auditované udalosti sa vždy nachádzajú v UTC. Odporúčame, aby ste vytvorili všetky svoje procesy auditovania na základe času UTC a nie na miestnom čase.

Skript vytvorí jeden súbor JSON za deň. Prípona názvu súboru obsahuje časovú pečiatku (vo formáte UTC) extrahovaných údajov. Ak extrahujete viackrát rovnaké údaje v rovnakom dni, prípona v názve súboru vám pomôže identifikovať novší súbor.

#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

Používanie rutiny typu cmdlet Get-PowerBIActivityEvent prostredia PowerShell má niekoľko výhod namiesto operácie rozhrania Get Activity Events REST API.

  • Rutina typu cmdlet umožňuje požiadať o jeden deň aktivity vždy, keď zavoláte pomocou rutiny typu cmdlet. Kým pri komunikácii priamo s rozhraním API môžete v prípade požiadavky rozhrania API požiadať len o jednu hodinu.
  • Rutina typu cmdlet spracováva pokračovačové tokeny za vás. Ak používate rozhranie API priamo, musíte skontrolovať pokračový token, aby ste zistili, či môžu prísť ďalšie výsledky. Niektoré rozhrania API musia z dôvodu výkonu používať stránkovanie a pokračovacie tokeny, aby sa vrátilo veľké množstvo údajov. Vrátia prvú množinu záznamov a potom s pokračovým tokenom môžete vykonať následné volanie rozhrania API na načítanie ďalšej množiny záznamov. Rozhranie API budete volať aj naďalej, až kým sa nevráti pokračový token. Použitie pokračového tokenu je spôsob, ako zlúčiť viacero požiadaviek rozhrania API tak, aby ste mohli konsolidovať logickú množinu výsledkov. Príklad použitia pokračového tokenu nájdete v téme Rozhranie REST API aktivít udalostí.
  • Rutina typu cmdlet spracúva platnosť prístupového tokenu Microsoft Entra ID (predtým známeho ako Azure Active Directory). Po overení uplynie platnosť prístupového tokenu po jednej hodine (predvolene). V tomto prípade rutina typu cmdlet automaticky vyžaduje token na obnovenie za vás. Ak komunikujete priamo s rozhraním API, musíte požiadať o token obnovenia.

Ďalšie informácie nájdete v téme Výber rozhraní API alebo rutín typu cmdlet prostredia PowerShell.

Poznámka

Vzorová odpoveď je vynechaná, pretože je to výstup podobný odpovedim zobrazeným v predchádzajúcich príkladoch.

Ďalšie informácie súvisiace s týmto článkom nájdete v nasledujúcich zdrojoch: