{"id":30576813,"url":"https://github.com/scns/privileged-users-report-multitenant","last_synced_at":"2026-02-23T22:34:29.713Z","repository":{"id":310376468,"uuid":"1037300788","full_name":"scns/Privileged-Users-Report-MultiTenant","owner":"scns","description":"PowerShell-tool voor PIM- en permanente rolrapportage in meerdere Microsoft 365/Azure AD tenants.","archived":false,"fork":false,"pushed_at":"2026-01-27T05:27:30.000Z","size":230,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-27T18:39:06.941Z","etag":null,"topics":["multitenant","multitenant-applications","pim","privileged","privileged-access-management","privileged-access-security","privileged-identity-management","security","security-tools"],"latest_commit_sha":null,"homepage":"https://mrtn.blog","language":"PowerShell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/scns.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":[],"patreon":null,"open_collective":null,"ko_fi":"maartenschmeitz","tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":"maartenschmeitz","thanks_dev":null,"custom":[],"bitcoin":"39dDgoRVGTFvFNh6sP1mBR2iSp6jfEnN16","ethereum":592031571554474447729594765284110064432523425935}},"created_at":"2025-08-13T11:15:18.000Z","updated_at":"2026-01-27T05:27:27.000Z","dependencies_parsed_at":"2025-08-17T18:29:34.895Z","dependency_job_id":"ea932686-5d8d-41e4-8b1e-7627db316eb7","html_url":"https://github.com/scns/Privileged-Users-Report-MultiTenant","commit_stats":null,"previous_names":["scns/privileged-users-report-multitenant"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/scns/Privileged-Users-Report-MultiTenant","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scns%2FPrivileged-Users-Report-MultiTenant","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scns%2FPrivileged-Users-Report-MultiTenant/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scns%2FPrivileged-Users-Report-MultiTenant/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scns%2FPrivileged-Users-Report-MultiTenant/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/scns","download_url":"https://codeload.github.com/scns/Privileged-Users-Report-MultiTenant/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scns%2FPrivileged-Users-Report-MultiTenant/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29758689,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-23T21:02:23.375Z","status":"ssl_error","status_checked_at":"2026-02-23T20:58:31.539Z","response_time":90,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["multitenant","multitenant-applications","pim","privileged","privileged-access-management","privileged-access-security","privileged-identity-management","security","security-tools"],"created_at":"2025-08-29T01:46:10.064Z","updated_at":"2026-02-23T22:34:29.698Z","avatar_url":"https://github.com/scns.png","language":"PowerShell","funding_links":["https://ko-fi.com/maartenschmeitz","https://buymeacoffee.com/maartenschmeitz","39dDgoRVGTFvFNh6sP1mBR2iSp6jfEnN16",592031571554474447729594765284110064432523425935],"categories":[],"sub_categories":[],"readme":"# PIM \u0026 Permanent Role Users Report - Multi Tenant\n\nEen uitgebreide PowerShell-oplossing voor het analyseren van Privileged Identity Management (PIM) en permanente roltoewijzingen in meerdere Microsoft 365/Azure AD tenants.\n\n## 📋 Overzicht\n\nDit script biedt gedetailleerde rapportage over:### ReportOnly Vereisten\n\n- Minimaal één bestaande export (via normale uitvoering)\n- `*_All_Customers_Full_Report.csv` bestand in export directory\n- Geldige `config.json` voor HTML instellingen\n\n## 💾 Backup Functionaliteit\n\n### Automatische Backups\n\nHet script biedt automatische backup functionaliteit voor:\n\n- **Export bestanden** - Alle CSV rapporten worden gecomprimeerd\n- **Configuratie bestanden** - config.json en credentials.json worden beveiligd\n- **Retention beleid** - Automatische opschoning van oude backups\n\n### Backup Configuratie\n\n```json\n\"BackupSettings\": {\n    \"EnableBackup\": true,\n    \"BackupRoot\": \"backups\",\n    \"ExportBackupSubfolder\": \"exports\", \n    \"ConfigBackupSubfolder\": \"config\",\n    \"EnableExportBackup\": true,\n    \"EnableConfigBackup\": true,\n    \"ExportBackupRetention\": 5,\n    \"ConfigBackupRetention\": 3\n}\n```\n\n### Backup Instellingen\n\n- **`EnableBackup`** - Hoofdschakelaar voor backup functionaliteit\n- **`BackupRoot`** - Root directory voor alle backups (standaard: \"backups\")\n- **`ExportBackupSubfolder`** - Subdirectory voor export backups\n- **`ConfigBackupSubfolder`** - Subdirectory voor configuratie backups\n- **`EnableExportBackup`** - Export bestanden backuppen (true/false)\n- **`EnableConfigBackup`** - Configuratie bestanden backuppen (true/false)\n- **`ExportBackupRetention`** - Aantal export backups te behouden (standaard: 5)\n- **`ConfigBackupRetention`** - Aantal config backups te behouden (standaard: 3)\n\n### Backup Voordelen\n\n✅ **Automatisch** - Backups worden automatisch aangemaakt na elke run\n\n✅ **Retention** - Oude backups worden automatisch verwijderd\n\n✅ **Gecomprimeerd** - ZIP formaat voor efficiënte opslag\n\n✅ **Timestamped** - Duidelijke naamgeving met datum/tijd\n\n✅ **Gefilterd** - Alleen relevante bestanden worden gebackupt\n\n## 🔄 Wijzigingsdetectie\n\n### Automatische Change Detection\n\nHet script bevat een geavanceerd systeem voor het detecteren van wijzigingen in roltoewijzingen tussen verschillende uitvoeringen. Dit helpt bij het monitoren van security changes en compliance tracking.\n\n### Intelligente PIM Filtering\n\nEen belangrijk kenmerk van de wijzigingsdetectie is dat **normale PIM-activaties niet worden gerapporteerd als wijzigingen**:\n\n- **Eligible → Active**: Wanneer een gebruiker een PIM rol activeert\n- **Active → Eligible**: Wanneer een PIM rol weer deactiveert/verloopt\n- **Eligible → Eligible**: Hernieuwing van eligible status\n\nDeze overgangen worden automatisch uitgefilterd omdat ze deel uitmaken van normale PIM-operaties en niet wijzen op structurele veranderingen in de roltoewijzingen.\n\n### Wel Gerapporteerde Wijzigingen\n\nHet systeem rapporteert wel de volgende belangrijke wijzigingen:\n\n- **Nieuwe roltoewijzingen**: Volledig nieuwe toegang voor gebruikers\n- **Verwijderde roltoewijzingen**: Intrekking van toegang\n- **Permanente rol wijzigingen**: Veranderingen in permanent toegewezen rollen\n- **Groepslidmaatschap veranderingen**: Wijzigingen via security groups\n- **Assignment Type wijzigingen**: Van Permanent naar PIM of vice versa\n\n### Change Report Output\n\n```csv\n# Voorbeeld uitvoer wijzigingsrapport\nUser,Role,ChangeType,PreviousState,CurrentState,Tenant,Timestamp\njohn.doe@company.com,Global Administrator,NEW,None,Permanent,Customer1,2025-08-18T10:30:00\njane.smith@company.com,Security Administrator,REMOVED,PIM Eligible,None,Customer2,2025-08-18T10:30:00\n```\n\n### Configuratie\n\nWijzigingsdetectie is automatisch ingeschakeld en vereist geen extra configuratie. Het systeem:\n\n- Vergelijkt automatisch met de vorige export\n- Genereert een `Changes_Report.csv` bestand\n- Toont samenvattingsstatistieken in de console\n- Integreert change information in het HTML dashboard\n\n### Wijzigingsdetectie Voordelen\n\n✅ **Security Monitoring** - Detecteert ongeautoriseerde wijzigingen\n\n✅ **Compliance Tracking** - Audit trail voor roltoewijzingen\n\n✅ **Intelligent Filtering** - Onderscheidt tussen operationele en structurele wijzigingen\n\n✅ **Automated Reporting** - Geen handmatige vergelijking nodig\n\n✅ **Historical Context** - Behoudt overzicht van veranderingen over tijd\n\n### Backup Structuur\n\n```text\nbackups/\n├── exports/\n│   ├── exports-20250817_200746.zip\n│   ├── exports-20250816_154321.zip\n│   └── ...\n└── config/\n    ├── config-20250817_200752.zip\n    ├── config-20250816_154325.zip\n    └── ...\n```\n\n## 🔧 Troubleshooting*PIM rol-toewijzingen** (Eligible en Active)'\n\n- **Permanente roltoewijzingen** (niet via PIM)\n- **Groepslidmaatschap** voor privileged rollen\n- **Multi-tenant ondersteuning** voor MSP's en grote organisaties\n- **HTML Dashboard** met moderne UI/UX\n- **Uitgebreide CSV exports** per klant en gecombineerd\n\n## ✨ Functies\n\n### 🔍 Uitgebreide Analyse\n\n- **PIM Eligible**: Gebruikers die rollen kunnen activeren\n- **PIM Active**: Momenteel geactiveerde rollen\n- **Permanent**: Permanente roltoewijzingen (security risk)\n- **Groepsleden**: Automatische detectie van gebruikers via groepslidmaatschap\n- **Service Principals**: Inclusief applicatie-identiteiten\n\n### 📊 Modern HTML Dashboard\n\n- **Dark/Light mode** toggle met persistentie\n- **Responsive design** voor alle apparaten\n- **Interactieve tabellen** met DataTables\n- **Per-klant tabs** voor gedetailleerde analyse\n- **Real-time statistieken** en grafieken\n- **Security aanbevelingen** en best practices\n\n### 📄 Uitgebreide Rapportage\n\n- **Per-klant CSV exports** met nieuwe naamconventie\n- **Gecombineerde rapporten** voor alle tenants\n- **Gefilterde rapporten** (Users Only, PIM Eligible, etc.)\n- **High-privilege gebruikers** rapportage\n- **Vergelijkingsrapporten** PIM vs Permanent\n\n### 🏢 Multi-Tenant Ondersteuning\n\n- **Meerdere tenants** in één run\n- **Flexibele credential structuur** ondersteuning\n- **Foutafhandeling** per tenant\n- **Gedetailleerde logging** met voortgangsindicaties\n\n## 🚀 Installatie\n\n### Vereisten\n\n- **PowerShell 5.1** of hoger\n- **Microsoft Graph PowerShell modules** (automatisch geïnstalleerd)\n- **Azure AD App Registration** met juiste permissies\n\n### Benodigde Permissies\n\nConfigureer de volgende Microsoft Graph API permissies in Azure AD:\n\n```text\nRoleManagement.Read.Directory\nDirectory.Read.All\nUser.Read.All\nGroup.Read.All\nApplication.Read.All\n```\n\n### Setup\n\n1. **Clone het repository**:\n\n   ```bash\n   git clone https://github.com/scns/Privileged-Users-Report-MultiTenant.git\n   cd Privileged-Users-Report-MultiTenant\n   ```\n\n2. **Configureer credentials**:\n\n   ```bash\n   # Kopieer template bestanden\n   copy _credentials.json credentials.json\n   copy _config.json config.json\n   \n   # Bewerk credentials.json met jouw tenant gegevens\n   notepad credentials.json\n   ```\n\n3. **Run het script**:\n\n   ```powershell\n   .\\Get-PIMUsers.ps1\n   ```\n\n## ⚙️ Configuratie\n\n### credentials.json\n\nMaak een `credentials.json` bestand met tenant informatie:\n\n```json\n{\n    \"LoginCredentials\": [\n        {\n            \"customername\": \"Customer1\",\n            \"ClientID\": \"your-app-id-here\",\n            \"Secret\": \"your-client-secret-here\",\n            \"TenantID\": \"your-tenant-id-here\"\n        },\n        {\n            \"customername\": \"Customer2\", \n            \"ClientID\": \"your-app-id-here\",\n            \"Secret\": \"your-client-secret-here\",\n            \"TenantID\": \"your-tenant-id-here\"\n        }\n    ]\n}\n```\n\n\u003e 💡 **Tip**: Gebruik het meegeleverde `_credentials.json` template bestand\n\n### config.json (Optioneel)\n\nPas rapportage-instellingen aan:\n\n```json\n{\n    \"ExportSettings\": {\n        \"OutputFolder\": \"exports\",\n        \"CreateDateSubfolders\": false,\n        \"ArchiveOldReports\": true,\n        \"MaxReportsToKeep\": 10\n    },\n    \"ReportSettings\": {\n        \"IncludeTimestamp\": false,\n        \"FileEncoding\": \"UTF8\",\n        \"DateFormat\": \"yyyyMMdd\",\n        \"IncludeServicePrincipals\": true\n    },\n    \"HTMLSettings\": {\n        \"GenerateHTMLDashboard\": true,\n        \"AutoOpenHTMLReport\": true\n    },\n    \"BackupSettings\": {\n        \"EnableBackup\": true,\n        \"BackupRoot\": \"backups\",\n        \"ExportBackupSubfolder\": \"exports\",\n        \"ConfigBackupSubfolder\": \"config\",\n        \"EnableExportBackup\": true,\n        \"EnableConfigBackup\": true,\n        \"ExportBackupRetention\": 5,\n        \"ConfigBackupRetention\": 3\n    }\n}\n```\n\n\u003e 💡 **Tip**: Gebruik het meegeleverde `_config.json` template bestand\n\n## 🖥️ Gebruik\n\n### Basis Gebruik\n\n```powershell\n# Standaard configuratie\n.\\Get-PIMUsers.ps1\n\n# Custom configuratie\n.\\Get-PIMUsers.ps1 -ConfigFile \"custom-config.json\" -OutputPath \"C:\\Reports\"\n```\n\n### Parameters\n\n- `-ConfigFile`: Pad naar configuratiebestand (standaard: config.json)\n- `-OutputPath`: Output directory (overschrijft config.json)\n- `-ReportOnly`: Genereer alleen HTML rapport uit bestaande exports zonder nieuwe data op te halen\n\n### Gebruik voorbeelden\n\n```powershell\n# Normale uitvoering - haalt nieuwe data op en genereert rapporten\n.\\Get-PIMUsers.ps1\n\n# Met aangepaste configuratie\n.\\Get-PIMUsers.ps1 -ConfigFile \"custom-config.json\"\n\n# Met aangepast output pad\n.\\Get-PIMUsers.ps1 -OutputPath \"C:\\Reports\"\n\n# Alleen HTML rapport genereren uit bestaande data\n.\\Get-PIMUsers.ps1 -ReportOnly\n\n# Combinatie van parameters\n.\\Get-PIMUsers.ps1 -ConfigFile \"custom-config.json\" -ReportOnly\n```\n\n## 📁 Output Bestanden\n\n### Naamconventie\n\nAlle bestanden gebruiken het format: `YYYYMMDD_Customer_ReportType.csv`\n\n### Per Klant\n\n- `20250816_Customer1_Full_Report.csv` - Alle rol-toewijzingen\n- `20250816_Customer1_Users_Only.csv` - Alleen gebruikers\n- `20250816_Customer1_PIM_Eligible.csv` - PIM Eligible rollen\n- `20250816_Customer1_PIM_Active.csv` - Actieve PIM rollen\n- `20250816_Customer1_Permanent_Roles.csv` - Permanente rollen\n- `20250816_Customer1_Summary.csv` - Samenvattingsrapport\n\n### Gecombineerde Rapporten\n\n- `20250816_All_Customers_Full_Report.csv` - Alle klanten gecombineerd\n- `20250816_All_Customers_High_Privilege.csv` - High-privilege rollen\n- `20250816_All_Customers_PIM_vs_Permanent_Comparison.csv` - Vergelijking\n- `PIM_Role_Dashboard.html` - **Interactief HTML Dashboard**\n\n## 🎨 HTML Dashboard Features\n\n### 📱 Modern Interface\n\n- **Responsive design** - Werkt op desktop, tablet, en mobile\n- **Dark/Light mode** - Automatische thema-persistentie\n- **FontAwesome iconen** - Professionele UI elementen\n- **Moderne kleuren** - Visueel aantrekkelijke statistieken\n\n### 📊 Interactieve Elementen\n\n- **DataTables** - Sorteerbare, doorzoekbare tabellen\n- **Customer tabs** - Gefocusseerde analyse per klant\n- **Real-time filters** - Dynamische data filtering\n- **Responsive statistieken** - Automatisch aangepaste lay-out\n- **Clickable filter buttons** - Directe filtering per rol type\n\n#### 🎯 Clickable Filter Buttons\n\nElke customer tab bevat intelligente filter buttons voor snelle data analyse:\n\n- **🗂️ Alle** - Toont alle rol-toewijzingen (totaal aantal tussen haakjes)\n- **🔵 Eligible** - Filtert alleen PIM Eligible rollen die geactiveerd kunnen worden\n- **🟢 Active** - Toont alleen momenteel actieve PIM rollen\n- **🔴 Permanent** - Toont permanente rollen (security risk - direct toegewezen)\n- **👤 Users** - Filtert alleen gebruikers (exclusief service principals)\n- **⚡ Global Admins** - Toont alleen Global Administrator rollen\n\n**Functionaliteit:**\n\n- **Direct klikken** - Geen reload nodig, client-side filtering\n- **Visual feedback** - Actieve filter wordt gemarkeerd\n- **Aantal indicatie** - Elk filter toont het aantal resultaten\n- **Snelle navigatie** - Schakel moeiteloos tussen verschillende views\n- **Kleurcodering** - Visuele identificatie van rol types\n\n### 🔍 Data Visualisatie\n\n- **Security status indicatoren** - Kleurgecodeerde risico's\n- **PIM adoptie percentage** - Compliance tracking\n- **Top rollen overzicht** - Meest gebruikte privileges\n- **Groepslidmaatschap indicaties** - Via groep of direct toegewezen\n\n## 🔒 Security Features\n\n### 🛡️ Risk Assessment\n\n- **Permanent rol detectie** - Identificeert security risico's\n- **Global Admin tracking** - Monitort hoogste privileges\n- **PIM adoptie metrics** - Compliance percentage\n- **Groepsleden analyse** - Verborgen toegang via groepen\n\n### 📈 Best Practices\n\n- **PIM adoptie \u003e 90%** wordt aanbevolen\n- **Minimaliseer permanent rollen** voor betere security\n- **Global Admins \u003c 5 per tenant** als guideline\n- **Regelmatige access reviews** voor compliance\n\n## � ReportOnly Mode\n\n### Wanneer gebruiken?\n\nDe `-ReportOnly` parameter is handig in deze situaties:\n\n- **Snel HTML dashboard regenereren** - Zonder wachten op API calls\n- **Verschillende visualisaties** - Experimenteren met configuratie wijzigingen\n- **Demo doeleinden** - Presenteren van bestaande data\n- **Troubleshooting HTML** - Testen van dashboard wijzigingen\n- **Offline analyse** - Werken met eerder opgehaalde data\n\n### Voordelen\n\n- ⚡ **Snelheid** - Geen API authenticatie of netwerkverkeer nodig\n- 🔄 **Vergelijking** - Automatische detectie van wijzigingen tussen exports\n- 💾 **Efficiëntie** - Hergebruik van bestaande data\n- 🎨 **Flexibiliteit** - Makkelijk experimenteren met rapportage\n\n### ReportOnly Vereisten\n\n- Minimaal één bestaande export (via normale uitvoering)\n- `*_All_Customers_Full_Report.csv` bestand in export directory\n- Geldige `config.json` voor HTML instellingen\n\n## �🔧 Troubleshooting\n\n### Veelvoorkomende Problemen\n\n#### \"Module niet gevonden\"\n\n```powershell\n# Installeer Microsoft Graph modules handmatig\nInstall-Module Microsoft.Graph.Authentication -Scope CurrentUser\nInstall-Module Microsoft.Graph.Identity.Governance -Scope CurrentUser\n```\n\n#### \"Insufficient privileges\"\n\n- Controleer Azure AD App permissions\n- Zorg voor admin consent op tenant niveau\n- Verificeer client secret geldigheid\n\n#### \"Credentials file not found\"\n\n- Maak `credentials.json` in script directory\n- Controleer JSON syntax en formatting\n- Zorg voor juiste property names\n\n#### \"Group members not detected\"\n\n**Symptomen:**\n\n- Script rapporteert groepsleden niet in de output\n- Alleen directe rol-toewijzingen zijn zichtbaar\n- Missing group membership data in reports\n\n**Mogelijke oorzaken en oplossingen:**\n\n1. **Microsoft Graph permissions**:\n\n   ```text\n   Benodigde permissions:\n   - Group.Read.All (Application permission)\n   - Directory.Read.All (Application permission)\n   ```\n\n2. **Admin consent**:\n\n   - Zorg dat admin consent is verleend voor alle permissions\n   - Check Azure AD \u003e App registrations \u003e [Your App] \u003e API permissions\n   - \"Grant admin consent\" moet groen zijn\n\n3. **Groep configuratie**:\n\n   - Verificeer dat security groups bestaan in de tenant\n   - Check of groepen daadwerkelijk leden hebben\n   - Controleer of groepen zijn toegewezen aan Azure AD rollen\n\n4. **Script logging controleren**:\n\n   ```powershell\n   # Run script met verbose output\n   .\\Get-PIMUsers.ps1 -Verbose\n   \n   # Check voor specifieke error messages\n   # Kijk naar \"Group enumeration\" sectie in output\n   ```\n\n5. **Manual verificatie**:\n\n   ```powershell\n   # Test Group API connectivity\n   Connect-MgGraph -Scopes \"Group.Read.All\"\n   Get-MgGroup -Filter \"displayName eq 'YourGroupName'\"\n   Get-MgGroupMember -GroupId \"group-id-here\"\n   ```\n\n## 🤝 Contributing\n\n1. **Fork** het repository\n2. **Create** een feature branch (`git checkout -b feature/AmazingFeature`)\n3. **Commit** je changes (`git commit -m 'Add AmazingFeature'`)\n4. **Push** naar branch (`git push origin feature/AmazingFeature`)\n5. **Open** een Pull Request\n\n## 📝 Changelog\n\n### v1.0 (2025-08-16)\n\n- ✅ **Multi-tenant ondersteuning** met flexibele credentials\n- ✅ **Groepsleden detectie** voor alle rol-toewijzingen\n- ✅ **Modern HTML Dashboard** met dark/light mode\n- ✅ **Nieuwe bestandsnaam conventie** zonder timestamps\n- ✅ **Uitgebreide error handling** en logging\n- ✅ **DataTables integratie** voor interactieve tabellen\n- ✅ **Per-klant rapportage** met complete segregatie\n- ✅ **Security metrics** en compliance tracking\n\n## 📄 Licentie\n\nDit project is gelicenseerd onder de [MIT License](LICENSE).\n\n## 👨‍💻 Auteur\n\n### PowerShell Script voor PIM \u0026 Permanent Role Rapportage\n\n- Versie: 1.0\n- Laatste update: 2025-08-16\n\n## 🙏 Dankbetuigingen\n\n- **Microsoft Graph PowerShell SDK** team\n- **DataTables** voor table functionaliteit  \n- **FontAwesome** voor moderne iconen\n- **jQuery** voor DOM manipulatie\n\n---\n\n💡 **Tip**: Voor de beste ervaring, open het HTML dashboard in een moderne browser zoals Chrome, Firefox, of Edge.\n\n🔒 **Security**: Bewaar credential bestanden veilig en deel ze nooit in version control.\n\n📊 **Analytics**: Gebruik de HTML dashboard voor real-time insights en de CSV bestanden voor uitgebreide analyse.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscns%2Fprivileged-users-report-multitenant","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fscns%2Fprivileged-users-report-multitenant","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscns%2Fprivileged-users-report-multitenant/lists"}