Přístup k protokolu aktivit Power BI

Tento článek se zaměřuje na správce Power BI, kteří potřebují přistupovat k datům zdrojovým z protokolu aktivit Power BI a analyzovat je. Zaměřuje se na programové načítání aktivit Power BI pomocí rutiny Get-PowerBIActivityEvent z modulu správy Power BI. Historie je k dispozici až 30 dní. Tato rutina používá operaci Rozhraní REST API Get Activity Events Power BI, což je rozhraní API pro správu. Rutiny PowerShellu přidávají nad podkladová rozhraní API vrstvu abstrakce. Proto rutina PowerShellu zjednodušuje přístup k protokolu aktivit Power BI.

Existují i další ruční a programové způsoby načítání aktivit Power BI. Další informace najdete v datech aktivit uživatelů accessu.

Analýza protokolu aktivit Power BI je zásadní pro zásady správného řízení, dodržování předpisů a sledování úsilí o přechod . Další informace o protokolu aktivit Power BI najdete v tématu Sledování aktivit uživatelů v Power BI.

Tip

Doporučujeme, abyste si plně prostudovali článek auditování na úrovni tenanta. Tento článek se zabývá plánováním, klíčovými rozhodnutími, požadavky a klíčovými aktivitami vývoje řešení, které je potřeba vzít v úvahu při vytváření komplexního řešení auditování.

Dostupné příklady

Cílem tohoto článku je poskytnout vám příklady, které vám pomůžou začít. Příklady zahrnují skripty, které načítají data z protokolu aktivit pomocí modulu PowerShell pro správu Power BI.

Upozorňující

Skripty nejsou připravené pro produkční prostředí, protože jsou určené jenom pro vzdělávací účely. Skripty ale můžete přizpůsobit pro produkční účely přidáním logiky pro protokolování, zpracování chyb, upozorňování a refaktoring pro opakované použití kódu a modularizaci.

Vzhledem k tomu, že jsou určené ke studiu, jsou příklady zjednodušené, ale jsou reálné. Doporučujeme projít si všechny příklady, abyste pochopili, jak se používají mírně odlišné techniky. Jakmile identifikujete typ potřebných dat aktivit, můžete kombinovat a shodovat techniky, abyste vytvořili skript, který nejlépe vyhovuje vašim požadavkům.

Tento článek obsahuje následující příklady.

Příklad názvu Typ dat aktivit
Ověřování pomocí služba Power BI
Zobrazení všech aktivit pro uživatele po dobu jednoho dne Všechny
Zobrazení aktivity po dobu N dnů Sdílení sestavy (odkaz nebo přímý přístup)
Zobrazení tří aktivit po dobu N dnů Vytvoření aplikace, aktualizace aplikace a instalace aplikace
Zobrazení všech aktivit pracovního prostoru na jeden den Všechny
Export všech aktivit za předchozí N dny Všechny

Pro zjednodušení většina příkladů vypíše výsledek na obrazovku. Například v editoru Visual Studio Code jsou data výstupem na panel terminálu, který obsahuje sadu vyrovnávací paměti dat v paměti.

Většina příkladů načítá nezpracovaná data JSON. Práce s nezpracovanými daty JSON má mnoho výhod.

  • Vrátí se všechny informace, které jsou k dispozici pro každou událost aktivity. To je užitečné pro vás, abyste se dozvěděli, jaká data jsou k dispozici. Mějte na paměti, že obsah odpovědi rozhraní API se liší v závislosti na skutečné události aktivity. Například data dostupná pro událost CreateApp se liší od události ViewReport .
  • Vzhledem k tomu, že se data dostupná v protokolu aktivit mění v průběhu času, můžete očekávat, že se změní i odpovědi rozhraní API. Tímto způsobem nebudou chybět nová data, která se zavedla. Váš proces je také odolnější vůči změnám a méně pravděpodobné selhání.
  • Podrobnosti odpovědi rozhraní API se můžou lišit pro komerční cloud Power BI a národní nebo regionální cloudy.
  • Pokud máte různé členy týmu (jako jsou datoví inženýři), kteří se do tohoto procesu zapojují, zjednodušte počáteční proces extrahování dat, což usnadňuje spolupráci více týmů.

Tip

Doporučujeme zachovat skripty, které extrahují data co nejjednodušším způsobem. Proto se vyhněte analýze, filtrování nebo formátování dat protokolu aktivit při extrahování. Tento přístup používá metodologii ELT , která obsahuje samostatné kroky pro extrakci, načtení a transformaci dat. Tento článek se zaměřuje pouze na první krok, který se zabývá extrahováním dat.

Požadavky

Pokud chcete použít ukázkové skripty, musíte splňovat následující požadavky.

  • Klientský nástroj PowerShellu: Použijte preferovaný nástroj pro spouštění příkazů PowerShellu. Všechny příklady byly testovány pomocí rozšíření PowerShellu pro Visual Studio Code s PowerShellem 7. Informace o klientských nástrojích a verzích PowerShellu najdete v tématu Auditování na úrovni tenanta.
  • Modul Správy Power BI: Nainstalujte všechny moduly PowerShellu Power BI. Pokud jste je dříve nainstalovali, doporučujeme aktualizovat moduly, abyste měli jistotu, že používáte nejnovější publikovanou verzi.
  • Role správce prostředků infrastruktury: Ukázkové skripty jsou navržené tak, aby používaly interaktivní tok ověřování. Proto se uživatel, který spouští ukázkové skripty PowerShellu, musí přihlásit, aby používal rozhraní REST API Power BI. Aby bylo možné načíst data protokolu aktivit, musí ověřovací uživatel patřit do role správce Power BI (protože načítání událostí aktivit se provádí pomocí rozhraní API pro správu). Ověřování instančního objektu je pro tyto příklady učení mimo rozsah.

Zbývající část tohoto článku obsahuje ukázkové skripty, které ukazují různé způsoby načítání dat protokolu aktivit.

Příklad 1: Ověření pomocí služba Power BI

Všechny operace rozhraní REST API Power BI vyžadují, abyste se přihlásili. Ověřování (kdo žádost provádí) a autorizaci (k čemu má uživatel oprávnění) spravuje platforma Microsoft Identity Platform. Následující příklad používá rutinu Připojení-PowerBIServiceAccount z modulu správy Power BI. Tato rutina podporuje jednoduchou metodu pro přihlášení.

Ukázkový požadavek 1

První skript vás přesměruje do prohlížeče a dokončí proces přihlášení. Uživatelské účty s povoleným vícefaktorovým ověřováním (MFA) můžou k přihlášení použít tento interaktivní tok ověřování.

Connect-PowerBIServiceAccount

Důležité

Uživatelé bez oprávnění správce Power BI nemůžou spouštět žádné ukázkové skripty, které následují v tomto článku. Správci Power BI mají oprávnění ke správě služba Power BI a načítání metadat celého tenanta (například dat protokolu aktivit). I když je použití ověřování instančního objektu pro tyto příklady mimo rozsah, důrazně doporučujeme nastavit instanční objekt pro připravené produkční bezobslužné skripty, které se budou spouštět podle plánu.

Před spuštěním některého z následujících skriptů se nezapomeňte přihlásit.

Příklad 2: Zobrazení všech aktivit pro uživatele po dobu jednoho dne

Někdy potřebujete zkontrolovat všechny aktivity, které konkrétní uživatel provedl v konkrétní den.

Tip

Při extrahování dat z protokolu aktivit pomocí rutiny PowerShellu může každý požadavek extrahovat data po dobu jednoho dne (maximálně 24 hodin). Cílem tohoto příkladu je tedy začít jednoduše kontrolou jednoho uživatele na jeden den. Další příklady najdete dále v tomto článku, které ukazují, jak pomocí smyčky exportovat data po dobu několika dnů.

Ukázkový požadavek 2

Tento skript deklaruje dvě proměnné PowerShellu, které usnadňují opakované použití skriptu:

  • $UserEmailAddr: E-mailová adresa uživatele, který vás zajímá.
  • $ActivityDate: Datum, které vás zajímá. Formát je RRRR-MM-DD (formát ISO 8601). Nemůžete požádat o datum dřívější než 30 dní před aktuálním datem.
#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 některých řádků ve skriptech PowerShellu si můžete všimnout znaku backtick ('). Jedním ze způsobů, jak v PowerShellu použít zpětný znak, je jako znak pokračování řádku. Použili jsme ho ke zlepšení čitelnosti skriptů v tomto článku.

Tip

Ve skriptu každá z proměnných PowerShellu koreluje s požadovanou nebo volitelnou hodnotou parametru v rutině Get-PowerBIActivityEvent . Například hodnota, kterou přiřadíte proměnné $UserEmailAddr , se předá parametru -User . Deklarace proměnných PowerShellu tímto způsobem je jednoduchý přístup, který zabrání pevným kódováním hodnot, které by se mohly ve skriptu změnit. To je dobrý zvyk přijmout, a to bude užitečné, když se vaše skripty stanou složitější. Parametry PowerShellu jsou robustnější než proměnné, ale jsou mimo rozsah pro tento článek.

Ukázková odpověď 2

Tady je ukázková odpověď JSON. Zahrnuje dvě aktivity, které uživatel provedl:

  • První aktivita ukazuje, že uživatel zobrazil sestavu.
  • Druhá aktivita ukazuje, že správce exportoval data z protokolu aktivit 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

Extrahování dat protokolu aktivit Power BI je také protokolovaná operace, jak je znázorněno v předchozí odpovědi. Při analýze aktivit uživatelů můžete chtít vynechat aktivity správce nebo je analyzovat samostatně.

Příklad 3: Zobrazení aktivity po dobu N dnů

Někdy můžete chtít prozkoumat jeden konkrétní typ aktivity za řadu dní. Tento příklad ukazuje, jak načíst aktivity sdílení sestavy pro jednotlivé položky. Pomocí smyčky načítá aktivity z předchozích sedmi dnů.

Ukázkový požadavek 3

Skript deklaruje dvě proměnné:

  • $ActivityType: Název operace pro aktivitu, kterou prošetřujete.
  • $NbrOfDaysToCheck: Kolik dní vás zajímá kontrola. Provede smyčku, která pracuje zpětně od aktuálního dne. Maximální povolená hodnota je 30 dnů (protože nejstarší datum, které můžete načíst, je 30 dní před aktuálním dnem).
#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

Pomocí této techniky smyčky můžete zkontrolovat všechny operace zaznamenané v protokolu aktivit.

Ukázková odpověď 3

Tady je ukázková odpověď JSON. Zahrnuje dvě aktivity, které uživatel provedl:

  • První aktivita ukazuje, že byl vytvořen odkaz pro sdílení pro uživatele. Všimněte si, že hodnota SharingAction se liší v závislosti na tom, jestli uživatel vytvořil odkaz, upravil odkaz nebo odstranil odkaz. V případě stručnosti se v odpovědi zobrazí jenom jeden typ aktivity sdílení odkazu.
  • Druhá aktivita ukazuje, že se vytvořil přímý přístup ke sdílení pro skupinu. Všimněte si, že hodnota SharingInformation se liší v závislosti na provedené akci. V případě stručnosti se v odpovědi zobrazí pouze jeden typ aktivity sdílení přímého pří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:

Tato odpověď JSON ukazuje, že se datová struktura liší podle typu události. Dokonce i stejný typ události může mít různé charakteristiky, které vytvářejí mírně odlišný výstup. Jak je doporučeno dříve v tomto článku, měli byste si zvyknout na načtení nezpracovaných dat.

Příklad 4: Zobrazení tří aktivit za N dnů

Někdy můžete chtít prozkoumat několik souvisejících aktivit. Tento příklad ukazuje, jak načíst tři konkrétní aktivity za posledních sedm dnů. Zaměřuje se na aktivity související s aplikacemi Power BI, včetně vytváření aplikace, aktualizace aplikace a instalace aplikace.

Ukázkový požadavek 4

Skript deklaruje následující proměnné:

  • $NbrOfDaysToCheck: Kolik dní vás zajímá kontrola. Provede smyčku, která funguje zpětně od aktuálního dne. Maximální povolená hodnota je 30 dnů (protože nejstarší datum, které můžete načíst, je 30 dní před aktuálním dnem).
  • $Activity1: Název operace pro první aktivitu, kterou prošetřujete. V tomto příkladu hledá aktivity vytváření aplikací Power BI.
  • $Activity2: Název druhé operace. V tomto příkladu hledá aktivity aktualizace aplikací Power BI.
  • $Activity3: Třetí název operace. V tomto příkladu hledá aktivity instalace aplikace Power BI.

Události aktivit můžete načíst pouze pro jednu aktivitu najednou. Skript tedy vyhledá každou operaci samostatně. Zkombinuje výsledky hledání do proměnné s názvem $FullResults, kterou pak vypíše na obrazovku.

Upozornění

Spouštění mnoha smyček mnohokrát výrazně zvyšuje pravděpodobnost omezování rozhraní API. Omezování může nastat, když překročíte počet požadavků, které můžete v daném časovém období provádět. Operace Získat události aktivit je omezená na 200 požadavků za hodinu. Při návrhu skriptů dbejte na to, abyste původní data načítali vícekrát, než potřebujete. Obecně je lepší extrahovat všechna nezpracovaná data jednou denně a pak dotazovat, transformovat, filtrovat nebo formátovat data samostatně.

Skript zobrazí výsledky pro aktuální den.

Poznámka:

Pokud chcete načíst jenom výsledky pro předchozí den – vyhněte se částečným výsledkům dne – podívejte se na příklad Export všech aktivit za předchozí N dny .)

#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

Ukázková odpověď 4

Tady je ukázková odpověď JSON. Zahrnuje tři aktivity, které uživatel provedl:

  • První aktivita ukazuje vytvoření aplikace Power BI.
  • Druhá aktivita ukazuje, že se aktualizovala aplikace Power BI.
  • Třetí aktivita ukazuje, že uživatel nainstaloval aplikaci Power BI.

Upozorňující

Odpověď obsahuje pouze uživatelská oprávnění, která byla změněna. Například je možné, že se v události CreateApp vytvořily tři cílové skupiny. Pokud se v události UpdateApp změní jenom jedna cílová skupina, zobrazí se v datech OrgAppPermission pouze jedna cílová skupina. Proto je závislost na události UpdateApp ke sledování všech oprávnění aplikace neúplná, protože protokol aktivit zobrazuje jenom to, co se změnilo.

Pokud chcete vytvořit snímek všech oprávnění aplikace Power BI, použijte místo toho operaci Získat uživatele aplikace jako Správa rozhraní 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"
  }
]

Příklad 5: Zobrazení všech aktivit pro pracovní prostor po dobu jednoho dne

Někdy můžete chtít prozkoumat aktivity související s konkrétním pracovním prostorem. Tento příklad načte všechny aktivity pro všechny uživatele po dobu jednoho dne. Potom filtruje výsledky, abyste se mohli zaměřit na analýzu aktivit z jednoho pracovního prostoru.

Ukázkový požadavek 5

Skript deklaruje dvě proměnné:

  • $ActivityDate: Datum, které vás zajímá. Formát je RRRR-MM-DD. Nemůžete požádat o datum dřívější než 30 dní před aktuálním datem.
  • $WorkspaceName: Název pracovního prostoru, který vás zajímá.

Skript uloží výsledky do $Results proměnné. Potom převede data JSON na objekt, aby se výsledky mohly analyzovat. Potom vyfiltruje výsledky a načte pět konkrétních sloupců. Data CreationTime se přejmenují na ActivityDateTime. Výsledky se filtrují podle názvu pracovního prostoru a výstup na obrazovku.

Pro rutinu Get-PowerBIActivityEvent neexistuje parametr, který umožňuje určit pracovní prostor při kontrole protokolu aktivit (v předchozích příkladech v tomto článku se použily parametry PowerShellu k nastavení konkrétního uživatele, data nebo názvu aktivity). V tomto příkladu skript načte všechna data a pak parsuje odpověď JSON a vyfiltruje výsledky pro konkrétní pracovní prostor.

Upozornění

Pokud jste ve velké organizaci, která má stovky nebo tisíce aktivit denně, může být filtrování výsledků po jejich načtení velmi neefektivní. Mějte na paměti, že operace Get Activity Events je omezená na 200 požadavků za hodinu.

Abyste se vyhnuli omezování rozhraní API (pokud překročíte počet požadavků, které můžete v daném časovém období provést), nenačítejte původní data víc, než potřebujete. Můžete pokračovat v práci s filtrovanými výsledky, aniž byste skript spustili, aby se výsledky znovu načetly. V případě probíhajících potřeb je lepší extrahovat všechna data jednou denně a pak se na něj mnohokrát dotazovat.

#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

Ukázková odpověď 5

Tady jsou filtrované výsledky, které zahrnují malou podmnožinu vlastností. Formát je snadněji čitelný pro občasnou analýzu. Pokud ale plánujete uložit výsledky, doporučujeme ho převést zpět do formátu JSON.

Poznámka:

Po převodu výsledků JSON na objekt PowerShellu se hodnoty času převedou na místní čas. Původní data auditu se vždy zaznamenávají v čase UTC (Coordinated Universal Time), takže doporučujeme zvyknout si používat jenom čas UTC.

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

Tuto techniku můžete použít k filtrování výsledků podle libovolné vlastnosti ve výsledcích. Můžete například použít konkrétní událost RequestId k analýze pouze jedné konkrétní události.

Příklad 6: Export všech aktivit za předchozí N dny

Někdy můžete chtít exportovat všechna data aktivit do souboru, abyste mohli pracovat s daty mimo PowerShell. Tento příklad načte všechny aktivity pro všechny uživatele po dobu až 30 dnů. Exportuje data do jednoho souboru JSON za den.

Důležité

Data protokolu aktivit jsou k dispozici maximálně 30 dnů. Je důležité exportovat a uchovávat data, abyste mohli provádět historickou analýzu. Pokud aktuálně data protokolu aktivit neexportujete a neukládáte, důrazně doporučujeme, abyste to upřednostnili.

Ukázkový požadavek 6

Skript načte všechny aktivity po dobu řady dnů. Deklaruje tři proměnné:

  • $NbrDaysDaysToExtract: Kolik dní vás zajímá export. Provede smyčku, která pracuje zpětně od předchozího dne. Maximální povolená hodnota je 30 dnů (protože nejstarší datum, které můžete načíst, je 30 dní před aktuálním dnem).
  • $ExportFileLocation: Cesta ke složce, kam chcete soubory uložit. Složka musí existovat před spuštěním skriptu. Nezahrnujte znak zpětného lomítka (\) na konec cesty ke složce (protože se automaticky přidá za běhu). K ukládání nezpracovaných datových souborů doporučujeme použít samostatnou složku.
  • $ExportFileName: Předpona pro každý název souboru. Protože je uložen jeden soubor za den, skript přidá příponu označující data obsažená v souboru a datum a čas načtení dat. Pokud jste například spustili skript v 9:00 (UTC) 25. dubna 2023, aby se extrahovali data aktivit z 23. dubna 2023, název souboru by byl: PBIActivityEvents-20230423-202304250900. I když je struktura složek, ve které je uložená, užitečná, měl by být název každého souboru plně popisovaný.

Doporučujeme extrahovat data, která jsou alespoň jeden den před aktuálním dnem. Tímto způsobem se vyhnete načítání částečných denních událostí a můžete mít jistotu, že každý soubor exportu obsahuje celých 24 hodin dat.

Skript shromažďuje data do předchozího dne až do 30 dnů. Časová razítka auditovaných událostí jsou vždy ve standardu UTC. Doporučujeme vytvořit všechny procesy auditování na základě času UTC, nikoli místního času.

Skript vytvoří jeden soubor JSON za den. Přípona názvu souboru zahrnuje časové razítko (ve formátu UTC) extrahovaných dat. Pokud extrahujete stejný den dat více než jednou, přípona v názvu souboru vám pomůže identifikovat novější soubor.

#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žití rutiny PowerShellu Get-PowerBIActivityEvent místo operace REST API Get-Activity Events má několik výhod.

  • Rutina umožňuje požádat o jeden den aktivity při každém volání pomocí rutiny. Zatímco když komunikujete s rozhraním API přímo, můžete požadovat pouze jednu hodinu na požadavek rozhraní API.
  • Rutina za vás zpracovává tokeny pokračování. Pokud rozhraní API používáte přímo, musíte zkontrolovat token pokračování, abyste zjistili, jestli se mají zobrazit nějaké další výsledky. Některá rozhraní API musí používat stránkovací a pokračovací tokeny z důvodů výkonu, když vrací velké množství dat. Vrátí první sadu záznamů a pak s tokenem pro pokračování můžete provést následné volání rozhraní API, které načte další sadu záznamů. Pokračujte v volání rozhraní API, dokud se nevrátí token pro pokračování. Použití tokenu pro pokračování je způsob, jak konsolidovat více požadavků rozhraní API, abyste mohli konsolidovat logickou sadu výsledků. Příklad použití tokenu pro pokračování najdete v tématu Rozhraní REST API událostí aktivit.
  • Rutina za vás zpracovává vypršení platnosti přístupového tokenu Microsoft Entra ID (dříve označovaného jako Azure Active Directory). Po ověření vyprší platnost přístupového tokenu po jedné hodině (ve výchozím nastavení). V takovém případě rutina automaticky požádá o obnovovací token. Pokud komunikujete s rozhraním API přímo, musíte požádat o obnovovací token.

Další informace najdete v tématu Volba rozhraní API nebo rutin PowerShellu.

Poznámka:

Ukázková odpověď se vynechá, protože se jedná o výstup podobný odpovědím uvedeným v předchozích příkladech.

Další informace týkající se tohoto článku najdete v následujících zdrojích informací: