New: Earn 20% as an AgentAlley affiliate. Share your link and earn on every sale you refer. Join now New: Earn 20% as an affiliate. Join now

Microsoft 365 tenant administration for Global

Microsoft 365 Tenant Manager

by alirezarezvani · MIT license · ★ 26,349 on GitHub · updated Aug 30

Microsoft 365 Tenant Manager cover

Microsoft 365 tenant administration for Global Administrators. Automate M365 tenant setup, Office 365 admin tasks, Azure AD user management, Exchange Online configuration, Teams administration, and security policies.

---
name: "ms365-tenant-manager"
description: Microsoft 365 tenant administration for Global Administrators. Automate M365 tenant setup, Office 365 admin tasks, Azure AD user management, Exchange Online configuration, Teams administration, and security policies. Generate PowerShell scripts for bulk operations, Conditional Access policies, license management, and compliance reporting. Use for M365 tenant manager, Office 365 admin, Azure AD users, Global Administrator, tenant configuration, or Microsoft 365 automation.
---

# Microsoft 365 Tenant Manager

Expert guidance and automation for Microsoft 365 Global Administrators managing tenant setup, user lifecycle, security policies, and organizational optimization.

---

## Quick Start

### Run a Security Audit

```powershell
Connect-MgGraph -Scopes "Directory.Read.All","Policy.Read.All","AuditLog.Read.All"
Get-MgSubscribedSku | Select-Object SkuPartNumber, ConsumedUnits, @{N="Total";E={$_.PrepaidUnits.Enabled}}

Overview

Expert guidance and automation for Microsoft 365 Global Administrators managing tenant setup, user lifecycle, security policies, and organizational optimization.

Manual install (npx, ZIP)
Claude Codenpx skills add alirezarezvani/claude-skills --skill ms365-tenant-manager -g -a claude-code
Claude Code (manual)mkdir -p ~/.claude/skills && curl -sL https://codeload.github.com/alirezarezvani/claude-skills/tar.gz/19392f7a0826 \ | tar -xz -C ~/.claude/skills --strip-components=3 claude-skills-19392f7a0826/engineering-team/skills/ms365-tenant-manager
Windows (PowerShell)New-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null; Invoke-WebRequest "https://m.agentalley.io/zip/5f034e0306251acb7deb/ms365-tenant-manager.zip" -OutFile "$env:TEMP\ms365-tenant-manager.zip"; Expand-Archive "$env:TEMP\ms365-tenant-manager.zip" -DestinationPath "$HOME\.claude\skills" -Force
Claude.ai / desktopDownload the ZIP and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md10.8 KB
  • expected_output.json2.0 KB
  • sample_input.json471 B
  • references/3 files · 39.2 KB
  • scripts/3 files · 51.9 KB
Read the files here
alirezarezvani/19392f79 files
SKILL.md
Show the full text298 lines

Microsoft 365 Tenant Manager

Expert guidance and automation for Microsoft 365 Global Administrators managing tenant setup, user lifecycle, security policies, and organizational optimization.


Quick Start

Run a Security Audit
Connect-MgGraph -Scopes "Directory.Read.All","Policy.Read.All","AuditLog.Read.All"
Get-MgSubscribedSku | Select-Object SkuPartNumber, ConsumedUnits, @{N="Total";E={$_.PrepaidUnits.Enabled}}
Get-MgPolicyAuthorizationPolicy | Select-Object AllowInvitesFrom, DefaultUserRolePermissions
Bulk Provision Users from CSV
# CSV columns: DisplayName, UserPrincipalName, Department, LicenseSku
Import-Csv .\new_users.csv | ForEach-Object {
    $passwordProfile = @{ Password = (New-Guid).ToString().Substring(0,16) + "!"; ForceChangePasswordNextSignIn = $true }
    New-MgUser -DisplayName $_.DisplayName -UserPrincipalName $_.UserPrincipalName `
               -Department $_.Department -AccountEnabled -PasswordProfile $passwordProfile
}
Create a Conditional Access Policy (MFA for Admins)
$adminRoles = (Get-MgDirectoryRole | Where-Object { $_.DisplayName -match "Admin" }).Id
$policy = @{
    DisplayName = "Require MFA for Admins"
    State = "enabledForReportingButNotEnforced"   # Start in report-only mode
    Conditions = @{ Users = @{ IncludeRoles = $adminRoles } }
    GrantControls = @{ Operator = "OR"; BuiltInControls = @("mfa") }
}
New-MgIdentityConditionalAccessPolicy -BodyParameter $policy
Bundled Python Generators

Three stdlib tools generate the PowerShell artifacts deterministically — prefer them over hand-writing scripts for bulk/repeatable work. Sample input: sample_input.json; expected shape: expected_output.json.

# Tenant setup: checklist + DNS records + license plan (JSON), or the full setup script
python3 scripts/tenant_setup.py --config sample_input.json --format json -o tenant_plan.json
python3 scripts/tenant_setup.py --config sample_input.json --format powershell -o tenant_setup.ps1

# User lifecycle: validate first, then generate creation/offboarding scripts
python3 scripts/user_management.py --domain acme.com --action validate --users users.json
python3 scripts/user_management.py --domain acme.com --action create --users users.json -o create_users.ps1
python3 scripts/user_management.py --domain acme.com --action offboard --user-email [email protected] -o offboard.ps1

# Admin scripts: CA policy / security audit / bulk licensing
python3 scripts/powershell_generator.py --tenant-domain acme.com --task conditional-access --policy-config policy.json -o ca_policy.ps1
python3 scripts/powershell_generator.py --tenant-domain acme.com --task security-audit -o audit.ps1
python3 scripts/powershell_generator.py --tenant-domain acme.com --task bulk-license --users-csv users.csv --license-sku ENTERPRISEPACK -o licenses.ps1

Gate: for user creation, run --action validate first and require every entry to report "is_valid": true before generating the creation script. Review every generated .ps1 against the workflows below before running it in the tenant.


Workflows

Workflow 1: New Tenant Setup

Step 1: Generate Setup Checklist

Run python3 scripts/tenant_setup.py --config tenant.json --format json and work through setup_checklist phase by phase; dns_records feeds Step 2 and license_recommendations feeds the licensing workflow.

Confirm prerequisites before provisioning:

  • Global Admin account created and secured with MFA
  • Custom domain purchased and accessible for DNS edits
  • License SKUs confirmed (E3 vs E5 feature requirements noted)

Step 2: Configure and Verify DNS Records

# After adding the domain in the M365 admin center, verify propagation before proceeding
$domain = "company.com"
Resolve-DnsName -Name "_msdcs.$domain" -Type NS -ErrorAction SilentlyContinue
# Also run from a shell prompt:
# nslookup -type=MX company.com
# nslookup -type=TXT company.com   # confirm SPF record

Wait for DNS propagation (up to 48 h) before bulk user creation.

Step 3: Apply Security Baseline

# Disable legacy authentication (blocks Basic Auth protocols)
$policy = @{
    DisplayName = "Block Legacy Authentication"
    State = "enabled"
    Conditions = @{ ClientAppTypes = @("exchangeActiveSync","other") }
    GrantControls = @{ Operator = "OR"; BuiltInControls = @("block") }
}
New-MgIdentityConditionalAccessPolicy -BodyParameter $policy

# Enable unified audit log
Set-AdminAuditLogConfig -UnifiedAuditLogIngestionEnabled $true

Step 4: Provision Users

$licenseSku = (Get-MgSubscribedSku | Where-Object { $_.SkuPartNumber -eq "ENTERPRISEPACK" }).SkuId

Import-Csv .\employees.csv | ForEach-Object {
    try {
        $user = New-MgUser -DisplayName $_.DisplayName -UserPrincipalName $_.UserPrincipalName `
                           -AccountEnabled -PasswordProfile @{ Password = (New-Guid).ToString().Substring(0,12)+"!"; ForceChangePasswordNextSignIn = $true }
        Set-MgUserLicense -UserId $user.Id -AddLicenses @(@{ SkuId = $licenseSku }) -RemoveLicenses @()
        Write-Host "Provisioned: $($_.UserPrincipalName)"
    } catch {
        Write-Warning "Failed $($_.UserPrincipalName): $_"
    }
}

Validation: Spot-check 3–5 accounts in the M365 admin portal; confirm licenses show "Active."


Workflow 2: Security Hardening

Step 1: Run Security Audit

Connect-MgGraph -Scopes "Directory.Read.All","Policy.Read.All","AuditLog.Read.All","Reports.Read.All"

# Export Conditional Access policy inventory
Get-MgIdentityConditionalAccessPolicy | Select-Object DisplayName, State |
    Export-Csv .\ca_policies.csv -NoTypeInformation

# Find accounts without MFA registered
$report = Get-MgReportAuthenticationMethodUserRegistrationDetail
$report | Where-Object { -not $_.IsMfaRegistered } |
    Select-Object UserPrincipalName, IsMfaRegistered |
    Export-Csv .\no_mfa_users.csv -NoTypeInformation

Write-Host "Audit complete. Review ca_policies.csv and no_mfa_users.csv."

Step 2: Create MFA Policy (report-only first)

$policy = @{
    DisplayName = "Require MFA All Users"
    State = "enabledForReportingButNotEnforced"
    Conditions = @{ Users = @{ IncludeUsers = @("All") } }
    GrantControls = @{ Operator = "OR"; BuiltInControls = @("mfa") }
}
New-MgIdentityConditionalAccessPolicy -BodyParameter $policy

Validation: After 48 h, review Sign-in logs in Entra ID; confirm expected users would be challenged, then change State to "enabled".

Step 3: Review Secure Score

# Retrieve current Secure Score and top improvement actions
Get-MgSecuritySecureScore -Top 1 | Select-Object CurrentScore, MaxScore, ActiveUserCount
Get-MgSecuritySecureScoreControlProfile | Sort-Object -Property ActionType |
    Select-Object Title, ImplementationStatus, MaxScore | Format-Table -AutoSize

Workflow 3: User Offboarding

Step 1: Block Sign-in and Revoke Sessions

$upn = "[email protected]"
$user = Get-MgUser -Filter "userPrincipalName eq '$upn'"

# Block sign-in immediately
Update-MgUser -UserId $user.Id -AccountEnabled:$false

# Revoke all active tokens
Invoke-MgInvalidateAllUserRefreshToken -UserId $user.Id
Write-Host "Sign-in blocked and sessions revoked for $upn"

Step 2: Preview with -WhatIf (license removal)

# Identify assigned licenses
$licenses = (Get-MgUserLicenseDetail -UserId $user.Id).SkuId

# Dry-run: print what would be removed
$licenses | ForEach-Object { Write-Host "[WhatIf] Would remove SKU: $_" }

Step 3: Execute Offboarding

# Remove licenses
Set-MgUserLicense -UserId $user.Id -AddLicenses @() -RemoveLicenses $licenses

# Convert mailbox to shared (requires ExchangeOnlineManagement module)
Set-Mailbox -Identity $upn -Type Shared

# Remove from all groups
Get-MgUserMemberOf -UserId $user.Id | ForEach-Object {
    try { Remove-MgGroupMemberByRef -GroupId $_.Id -DirectoryObjectId $user.Id } catch {}
}
Write-Host "Offboarding complete for $upn"

Validation: Confirm in the M365 admin portal that the account shows "Blocked," has no active licenses, and the mailbox type is "Shared."


Best Practices

Tenant Setup
  1. Enable MFA before adding users
  2. Configure named locations for Conditional Access
  3. Use separate admin accounts with PIM
  4. Verify custom domains (and DNS propagation) before bulk user creation
  5. Apply Microsoft Secure Score recommendations
Security Operations
  1. Start Conditional Access policies in report-only mode
  2. Review Sign-in logs for 48 h before enforcing a new policy
  3. Never hardcode credentials in scripts — use Azure Key Vault or Get-Credential
  4. Enable unified audit logging for all operations
  5. Conduct quarterly security reviews and Secure Score check-ins
PowerShell Automation
  1. Prefer Microsoft Graph (Microsoft.Graph module) over legacy MSOnline
  2. Include try/catch blocks for error handling
  3. Implement Write-Host/Write-Warning logging for audit trails
  4. Use -WhatIf or dry-run output before bulk destructive operations
  5. Test in a non-production tenant first

Reference Guides

references/powershell-templates.md

  • Ready-to-use script templates
  • Conditional Access policy examples
  • Bulk user provisioning scripts
  • Security audit scripts

references/security-policies.md

  • Conditional Access configuration
  • MFA enforcement strategies
  • DLP and retention policies
  • Security baseline settings

references/troubleshooting.md

  • Common error resolutions
  • PowerShell module issues
  • Permission troubleshooting
  • DNS propagation problems

Limitations

Constraint Impact
Global Admin required Full tenant setup needs highest privilege
API rate limits Bulk operations may be throttled
License dependencies E3/E5 required for advanced features
Hybrid scenarios On-premises AD needs additional configuration
PowerShell prerequisites Microsoft.Graph module required
Required PowerShell Modules
Install-Module Microsoft.Graph -Scope CurrentUser
Install-Module ExchangeOnlineManagement -Scope CurrentUser
Install-Module MicrosoftTeams -Scope CurrentUser
Required Permissions
  • Global Administrator — Full tenant setup
  • User Administrator — User management
  • Security Administrator — Security policies
  • Exchange Administrator — Mailbox management
1---
2name: "ms365-tenant-manager"
3description: Microsoft 365 tenant administration for Global Administrators. Automate M365 tenant setup, Office 365 admin tasks, Azure AD user management, Exchange Online configuration, Teams administration, and security policies. Generate PowerShell scripts for bulk operations, Conditional Access policies, license management, and compliance reporting. Use for M365 tenant manager, Office 365 admin, Azure AD users, Global Administrator, tenant configuration, or Microsoft 365 automation.
4---
5 
6# Microsoft 365 Tenant Manager
7 
8Expert guidance and automation for Microsoft 365 Global Administrators managing tenant setup, user lifecycle, security policies, and organizational optimization.
9 
10---
11 
12## Quick Start
13 
14### Run a Security Audit
15 
16```powershell
17Connect-MgGraph -Scopes "Directory.Read.All","Policy.Read.All","AuditLog.Read.All"
18Get-MgSubscribedSku | Select-Object SkuPartNumber, ConsumedUnits, @{N="Total";E={$_.PrepaidUnits.Enabled}}
19Get-MgPolicyAuthorizationPolicy | Select-Object AllowInvitesFrom, DefaultUserRolePermissions
20```
21 
22### Bulk Provision Users from CSV
23 
24```powershell
25# CSV columns: DisplayName, UserPrincipalName, Department, LicenseSku
26Import-Csv .\new_users.csv | ForEach-Object {
27 $passwordProfile = @{ Password = (New-Guid).ToString().Substring(0,16) + "!"; ForceChangePasswordNextSignIn = $true }
28 New-MgUser -DisplayName $_.DisplayName -UserPrincipalName $_.UserPrincipalName `
29 -Department $_.Department -AccountEnabled -PasswordProfile $passwordProfile
30}
31```
32 
33### Create a Conditional Access Policy (MFA for Admins)
34 
35```powershell
36$adminRoles = (Get-MgDirectoryRole | Where-Object { $_.DisplayName -match "Admin" }).Id
37$policy = @{
38 DisplayName = "Require MFA for Admins"
39 State = "enabledForReportingButNotEnforced" # Start in report-only mode
40 Conditions = @{ Users = @{ IncludeRoles = $adminRoles } }
41 GrantControls = @{ Operator = "OR"; BuiltInControls = @("mfa") }
42}
43New-MgIdentityConditionalAccessPolicy -BodyParameter $policy
44```
45 
46### Bundled Python Generators
47 
48Three stdlib tools generate the PowerShell artifacts deterministically — prefer them over hand-writing scripts for bulk/repeatable work. Sample input: `sample_input.json`; expected shape: `expected_output.json`.
49 
50```bash
51# Tenant setup: checklist + DNS records + license plan (JSON), or the full setup script
52python3 scripts/tenant_setup.py --config sample_input.json --format json -o tenant_plan.json
53python3 scripts/tenant_setup.py --config sample_input.json --format powershell -o tenant_setup.ps1
54 
55# User lifecycle: validate first, then generate creation/offboarding scripts
56python3 scripts/user_management.py --domain acme.com --action validate --users users.json
57python3 scripts/user_management.py --domain acme.com --action create --users users.json -o create_users.ps1
58python3 scripts/user_management.py --domain acme.com --action offboard --user-email [email protected] -o offboard.ps1
59 
60# Admin scripts: CA policy / security audit / bulk licensing
61python3 scripts/powershell_generator.py --tenant-domain acme.com --task conditional-access --policy-config policy.json -o ca_policy.ps1
62python3 scripts/powershell_generator.py --tenant-domain acme.com --task security-audit -o audit.ps1
63python3 scripts/powershell_generator.py --tenant-domain acme.com --task bulk-license --users-csv users.csv --license-sku ENTERPRISEPACK -o licenses.ps1
64```
65 
66**Gate:** for user creation, run `--action validate` first and require every entry to report `"is_valid": true` before generating the creation script. Review every generated `.ps1` against the workflows below before running it in the tenant.
67 
68---
69 
70## Workflows
71 
72### Workflow 1: New Tenant Setup
73 
74**Step 1: Generate Setup Checklist**
75 
76Run `python3 scripts/tenant_setup.py --config tenant.json --format json` and work through `setup_checklist` phase by phase; `dns_records` feeds Step 2 and `license_recommendations` feeds the licensing workflow.
77 
78Confirm prerequisites before provisioning:
79- Global Admin account created and secured with MFA
80- Custom domain purchased and accessible for DNS edits
81- License SKUs confirmed (E3 vs E5 feature requirements noted)
82 
83**Step 2: Configure and Verify DNS Records**
84 
85```powershell
86# After adding the domain in the M365 admin center, verify propagation before proceeding
87$domain = "company.com"
88Resolve-DnsName -Name "_msdcs.$domain" -Type NS -ErrorAction SilentlyContinue
89# Also run from a shell prompt:
90# nslookup -type=MX company.com
91# nslookup -type=TXT company.com # confirm SPF record
92```
93 
94Wait for DNS propagation (up to 48 h) before bulk user creation.
95 
96**Step 3: Apply Security Baseline**
97 
98```powershell
99# Disable legacy authentication (blocks Basic Auth protocols)
100$policy = @{
101 DisplayName = "Block Legacy Authentication"
102 State = "enabled"
103 Conditions = @{ ClientAppTypes = @("exchangeActiveSync","other") }
104 GrantControls = @{ Operator = "OR"; BuiltInControls = @("block") }
105}
106New-MgIdentityConditionalAccessPolicy -BodyParameter $policy
107 
108# Enable unified audit log
109Set-AdminAuditLogConfig -UnifiedAuditLogIngestionEnabled $true
110```
111 
112**Step 4: Provision Users**
113 
114```powershell
115$licenseSku = (Get-MgSubscribedSku | Where-Object { $_.SkuPartNumber -eq "ENTERPRISEPACK" }).SkuId
116 
117Import-Csv .\employees.csv | ForEach-Object {
118 try {
119 $user = New-MgUser -DisplayName $_.DisplayName -UserPrincipalName $_.UserPrincipalName `
120 -AccountEnabled -PasswordProfile @{ Password = (New-Guid).ToString().Substring(0,12)+"!"; ForceChangePasswordNextSignIn = $true }
121 Set-MgUserLicense -UserId $user.Id -AddLicenses @(@{ SkuId = $licenseSku }) -RemoveLicenses @()
122 Write-Host "Provisioned: $($_.UserPrincipalName)"
123 } catch {
124 Write-Warning "Failed $($_.UserPrincipalName): $_"
125 }
126}
127```
128 
129**Validation:** Spot-check 3–5 accounts in the M365 admin portal; confirm licenses show "Active."
130 
131---
132 
133### Workflow 2: Security Hardening
134 
135**Step 1: Run Security Audit**
136 
137```powershell
138Connect-MgGraph -Scopes "Directory.Read.All","Policy.Read.All","AuditLog.Read.All","Reports.Read.All"
139 
140# Export Conditional Access policy inventory
141Get-MgIdentityConditionalAccessPolicy | Select-Object DisplayName, State |
142 Export-Csv .\ca_policies.csv -NoTypeInformation
143 
144# Find accounts without MFA registered
145$report = Get-MgReportAuthenticationMethodUserRegistrationDetail
146$report | Where-Object { -not $_.IsMfaRegistered } |
147 Select-Object UserPrincipalName, IsMfaRegistered |
148 Export-Csv .\no_mfa_users.csv -NoTypeInformation
149 
150Write-Host "Audit complete. Review ca_policies.csv and no_mfa_users.csv."
151```
152 
153**Step 2: Create MFA Policy (report-only first)**
154 
155```powershell
156$policy = @{
157 DisplayName = "Require MFA All Users"
158 State = "enabledForReportingButNotEnforced"
159 Conditions = @{ Users = @{ IncludeUsers = @("All") } }
160 GrantControls = @{ Operator = "OR"; BuiltInControls = @("mfa") }
161}
162New-MgIdentityConditionalAccessPolicy -BodyParameter $policy
163```
164 
165**Validation:** After 48 h, review Sign-in logs in Entra ID; confirm expected users would be challenged, then change `State` to `"enabled"`.
166 
167**Step 3: Review Secure Score**
168 
169```powershell
170# Retrieve current Secure Score and top improvement actions
171Get-MgSecuritySecureScore -Top 1 | Select-Object CurrentScore, MaxScore, ActiveUserCount
172Get-MgSecuritySecureScoreControlProfile | Sort-Object -Property ActionType |
173 Select-Object Title, ImplementationStatus, MaxScore | Format-Table -AutoSize
174```
175 
176---
177 
178### Workflow 3: User Offboarding
179 
180**Step 1: Block Sign-in and Revoke Sessions**
181 
182```powershell
183$upn = "[email protected]"
184$user = Get-MgUser -Filter "userPrincipalName eq '$upn'"
185 
186# Block sign-in immediately
187Update-MgUser -UserId $user.Id -AccountEnabled:$false
188 
189# Revoke all active tokens
190Invoke-MgInvalidateAllUserRefreshToken -UserId $user.Id
191Write-Host "Sign-in blocked and sessions revoked for $upn"
192```
193 
194**Step 2: Preview with -WhatIf (license removal)**
195 
196```powershell
197# Identify assigned licenses
198$licenses = (Get-MgUserLicenseDetail -UserId $user.Id).SkuId
199 
200# Dry-run: print what would be removed
201$licenses | ForEach-Object { Write-Host "[WhatIf] Would remove SKU: $_" }
202```
203 
204**Step 3: Execute Offboarding**
205 
206```powershell
207# Remove licenses
208Set-MgUserLicense -UserId $user.Id -AddLicenses @() -RemoveLicenses $licenses
209 
210# Convert mailbox to shared (requires ExchangeOnlineManagement module)
211Set-Mailbox -Identity $upn -Type Shared
212 
213# Remove from all groups
214Get-MgUserMemberOf -UserId $user.Id | ForEach-Object {
215 try { Remove-MgGroupMemberByRef -GroupId $_.Id -DirectoryObjectId $user.Id } catch {}
216}
217Write-Host "Offboarding complete for $upn"
218```
219 
220**Validation:** Confirm in the M365 admin portal that the account shows "Blocked," has no active licenses, and the mailbox type is "Shared."
221 
222---
223 
224## Best Practices
225 
226### Tenant Setup
227 
2281. Enable MFA before adding users
2292. Configure named locations for Conditional Access
2303. Use separate admin accounts with PIM
2314. Verify custom domains (and DNS propagation) before bulk user creation
2325. Apply Microsoft Secure Score recommendations
233 
234### Security Operations
235 
2361. Start Conditional Access policies in report-only mode
2372. Review Sign-in logs for 48 h before enforcing a new policy
2383. Never hardcode credentials in scripts — use Azure Key Vault or `Get-Credential`
2394. Enable unified audit logging for all operations
2405. Conduct quarterly security reviews and Secure Score check-ins
241 
242### PowerShell Automation
243 
2441. Prefer Microsoft Graph (`Microsoft.Graph` module) over legacy MSOnline
2452. Include `try/catch` blocks for error handling
2463. Implement `Write-Host`/`Write-Warning` logging for audit trails
2474. Use `-WhatIf` or dry-run output before bulk destructive operations
2485. Test in a non-production tenant first
249 
250---
251 
252## Reference Guides
253 
254**references/powershell-templates.md**
255- Ready-to-use script templates
256- Conditional Access policy examples
257- Bulk user provisioning scripts
258- Security audit scripts
259 
260**references/security-policies.md**
261- Conditional Access configuration
262- MFA enforcement strategies
263- DLP and retention policies
264- Security baseline settings
265 
266**references/troubleshooting.md**
267- Common error resolutions
268- PowerShell module issues
269- Permission troubleshooting
270- DNS propagation problems
271 
272---
273 
274## Limitations
275 
276| Constraint | Impact |
277|------------|--------|
278| Global Admin required | Full tenant setup needs highest privilege |
279| API rate limits | Bulk operations may be throttled |
280| License dependencies | E3/E5 required for advanced features |
281| Hybrid scenarios | On-premises AD needs additional configuration |
282| PowerShell prerequisites | Microsoft.Graph module required |
283 
284### Required PowerShell Modules
285 
286```powershell
287Install-Module Microsoft.Graph -Scope CurrentUser
288Install-Module ExchangeOnlineManagement -Scope CurrentUser
289Install-Module MicrosoftTeams -Scope CurrentUser
290```
291 
292### Required Permissions
293 
294- **Global Administrator** — Full tenant setup
295- **User Administrator** — User management
296- **Security Administrator** — Security policies
297- **Exchange Administrator** — Mailbox management
298 
View all files on GitHub →

Details

Updated
Aug 30, 2026
License
MIT
Stars on the repo
★ 26,349
Checked
Source
alirezarezvani/claude-skills ↗
Creator
alirezarezvani · 363 listings
View creator

Similar skills

See all →
SkillFrom a business idea, app ideaAzure app onboardmicrosoft/skills · by microsoftEnd-to-end orchestrator: from a business idea, app idea, or existing app to running Azure deployment with cost estimates and pre-deploy approval. Analyzes your app, auto-detects the right Azure services, scaffolds infrastructure code, and deploys — tailored to your app, not a template. Handles moving existing apps to Azure without rewriting or with minimal changes. WHEN: bring your app to Azure, plan my app, cost to run, is my code ready to deploy, deploy my app to the cloud, deploy all my services, what Azure services do I need, plan my Azure deployment, deploy my new app to Azure, one-click deploy, I have an app and want it on Azure, migrate my app to Azure, help me get started, build an app, no code yet, starter project. DO NOT USE FOR: use azd for deployment(use azure-deploy), optimizing existing costs (use cost-optimization), code readiness checks only (use azure-app-onboard-prereq).★ 3.1k GitHub starsSkillAssess whether source code is ready to deploy to AzureAzure App Onboard Prereq — Repository Evaluationmicrosoft/skills · by microsoftAssess whether source code is ready to deploy to Azure — the check BEFORE infrastructure work. Evaluates build health, app completeness, dependencies and local services, stack compatibility, and deployment feasibility. Answers questions about what your app needs before it can be deployed — frameworks, dependencies, and configuration. Checks whether dependencies are compatible and identifies deployment blockers and unsupported frameworks. WHEN: "evaluate my repo", "is my app ready to deploy", "what does my app need to deploy", "what do I need before deploying", "does my app need", "can I ship this to Azure", "scan my repo for issues", "is this app deployable", "check if my app is ready for Azure", "do I need a Dockerfile", "what's blocking my deployment", "are there any blockers", "are my dependencies compatible", "does Azure support my framework", "what needs to change before deploying", "check my app configuration".★ 3.1k GitHub starsSkillConfigure Azure API Management as an AI Gateway for AIAzure aigatewaymicrosoft/azure-skills · by microsoftConfigure Azure API Management as an AI Gateway for AI models, MCP tools, and agents. WHEN: semantic caching, token limit, content safety, load balancing, AI model governance, MCP rate limiting, jailbreak detection, add Azure OpenAI backend, add AI Foundry model, test AI gateway, LLM policies, configure AI backend, token metrics, AI cost control, convert API to MCP, import OpenAPI to gateway.★ 1.6k GitHub starsSkillQuery and analyze data in Azure Data Explorer using KQLAzure Data Explorer (Kusto) Query & Analyticsmicrosoft/azure-skills · by microsoftQuery and analyze data in Azure Data Explorer (Kusto/ADX) using KQL for log analytics, telemetry, and time series analysis. WHEN: KQL queries, Kusto database queries, Azure Data Explorer, ADX clusters, log analytics, time series data, IoT telemetry, anomaly detection.★ 1.6k GitHub starsMCPRun any server from the Docker MCP Catalog in its ownDocker MCP gatewaydocker/mcp-gateway · by dockerDocker's own CLI plugin: run any server from the Docker MCP Catalog in its own container, behind one connection, with secrets kept out of env vars.★ 1.6k GitHub starsMCPOpen infrastructure for AI agents to discover and pay eachElisymelisymlabs/elisym · by elisymlabsOpen infrastructure for AI agents to discover and pay each other★ 17 GitHub stars

More from alirezarezvani

SkillResume a paused experiment/ar:ar-resume — Resume Experimentalirezarezvani/claude-skills · by alirezarezvaniResume a paused experiment. Checkout the experiment branch, read results history, continue iterating. Use when the user runs /ar:ar-resume or asks to pick up a previously started autoresearch experiment.★ 26.3k GitHub starsSkillShow experiment dashboard with results, active loops/ar:ar-status — Experiment Dashboardalirezarezvani/claude-skills · by alirezarezvaniShow experiment dashboard with results, active loops, and progress. Use when the user runs /ar:ar-status or asks how an autoresearch experiment is going.★ 26.3k GitHub starsSkillStart an autonomous experiment loop with user-selected/ar:loop — Autonomous Experiment Loopalirezarezvani/claude-skills · by alirezarezvaniStart an autonomous experiment loop with user-selected interval (10min, 1h, daily, weekly, monthly). Uses CronCreate for scheduling. Use when the user runs /ar:loop or asks to run an autoresearch experiment continuously on a schedule.★ 26.3k GitHub starsSkillRun a single experiment iteration/ar:run — Single Experiment Iterationalirezarezvani/claude-skills · by alirezarezvaniRun a single experiment iteration. Edit the target file, evaluate, keep or discard. Use when the user runs /ar:run or asks for one manual autoresearch iteration.★ 26.3k GitHub starsSkillSet up a new autoresearch experiment interactively/ar:setup — Create New Experimentalirezarezvani/claude-skills · by alirezarezvaniSet up a new autoresearch experiment interactively. Collects domain, target file, eval command, metric, direction, and evaluator. Use when the user runs /ar:setup or asks to start optimizing a file with the autoresearch loop.★ 26.3k GitHub starsSkill/cs:boardroom <brief/cs:boardroom — Multi-Role Boardroom Deliberationalirezarezvani/claude-skills · by alirezarezvani/cs:boardroom <brief> — 6-phase multi-role deliberation across the C-suite with Phase 2 isolation, critic pre-screen, and synthesis. Outputs a board memo. Use when a decision spans multiple executive domains — e.g. a pricing change touching finance, positioning, and product, or a raise-vs-cut runway call.★ 26.3k GitHub stars