PowerShell toolkit for exploring and managing Microsoft 365 services through Graph API. Simplifies complex API calls, provides ready-to-use scripts for common tasks, and helps IT admins manage M365 environments efficiently.
- Explore Graph API without writing complex code
- Manage Users across Azure AD and M365
- Automate Reports for compliance and auditing
- Handle Bulk Operations on mailboxes, groups, teams
- Export Data in multiple formats
- Test API Calls before implementation
# Get all users with specific license
Get-GraphUsers -Filter "assignedLicenses/any(x:x/skuId eq 'SPE_E5')"
# Bulk create users from CSV
Import-Csv users.csv | New-GraphUser -SendWelcomeEmail
# Find inactive users
Get-InactiveUsers -Days 90 | Export-Csv inactive_users.csv
# Search emails across organization
Search-GraphMail -Query "invoice" -From "2024-01-01"
# Export calendar events
Get-GraphCalendarEvents -User "user@domain.com" -Days 30
# Set out-of-office for multiple users
Set-BulkOutOfOffice -UserList $users -Message "On vacation"
# Create team from template
New-GraphTeam -Template "ProjectTeam" -Name "Q1 Project"
# Audit team membership
Get-TeamMembershipReport -IncludeGuests | Export-Excel
# Archive inactive teams
Get-InactiveTeams -Days 180 | Set-TeamArchiveStatus -Archive
# Install module
Install-Module Microsoft.Graph
Install-Module GraphExplorerToolkit
# Connect to Graph
Connect-GraphExplorer -TenantId "your-tenant"
# Run your first query
Get-GraphData -Resource "users" -Top 10
Get-LicenseReport.ps1
- License usage and costsGet-SecurityReport.ps1
- Security compliance statusGet-MailboxSizeReport.ps1
- Storage utilizationGet-GuestUserReport.ps1
- External user auditGet-GroupMembershipReport.ps1
- Group memberships
Sync-ADtoGraph.ps1
- Sync on-prem AD to Azure ADProcess-JoinersLeavers.ps1
- Onboarding/offboardingUpdate-UserProperties.ps1
- Bulk property updatesMigrate-DistributionLists.ps1
- DL to M365 GroupsBackup-TeamsConfig.ps1
- Teams configuration backup
Test-GraphPermissions.ps1
- Verify API permissionsConvert-GraphData.ps1
- Transform API responsesExport-GraphSchema.ps1
- Document API schemaMonitor-GraphThrottling.ps1
- Track API limitsInvoke-GraphBatch.ps1
- Batch API requests
# Build complex queries easily
$query = New-GraphQuery -Resource "users" `
-Select "displayName,mail,department" `
-Filter "department eq 'IT'" `
-OrderBy "displayName" `
-Top 100
Invoke-GraphQuery $query
# Process in batches to avoid throttling
$users | Invoke-GraphBatch -BatchSize 20 -Operation {
param($user)
Update-GraphUser -Id $user.id -Department "NewDept"
}
# Automatic retry with exponential backoff
Invoke-GraphRequest -Uri $uri -RetryCount 3 -RetryDelay 2
Create your own Graph cmdlets:
function Get-CompanyPhones {
Get-GraphData -Resource "users" `
-Select "displayName,mobilePhone,businessPhones" `
-Filter "companyName eq 'Contoso'"
}
# Chain operations
Get-GraphUsers |
Where-Object { $_.accountEnabled -eq $false } |
Set-GraphUserStatus -Enabled $true |
Send-GraphMail -Template "AccountReactivated"
# Speed up bulk operations
$users | ForEach-Object -Parallel {
Get-GraphUserDetails -Id $_.id
} -ThrottleLimit 10
- CSV - For Excel analysis
- JSON - For further processing
- HTML - For reports
- XML - For integration
- SQLite - For local database
- Certificate Authentication supported
- Managed Identity for Azure resources
- Least Privilege permission model
- Audit Logging of all operations
- Secure Credential storage
Common issues and solutions:
Issue | Solution |
---|---|
Permission denied | Check app registration permissions |
Throttling (429) | Use batch operations and delays |
Token expired | Refresh with Connect-GraphExplorer |
No data returned | Verify filter syntax and permissions |
Contributions welcome! Share your useful Graph API scripts.
MIT License - Free for all use