界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
效率与协作 · SKILL.md

cipp-tenants

cipp-tenants

【效率与协作】The top-level CIPP scope: enumerating managed M365 tenants, retrieving tenant detail, and the accepted `tenantFilter` identifier formats (default domain, custom domain, GUID, `allTenants`). Also covers stale-cache detection and the two common tenant-resolution failure modes.

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

name: "cipp-tenants" description: "The top-level CIPP scope: enumerating managed M365 tenants, retrieving tenant detail, and the accepted tenantFilter identifier formats (default domain, custom domain, GUID, allTenants). Also covers stale-cache detection and the two common tenant-resolution failure modes." when_to_use: >- When listing managed M365 tenants, looking up tenant IDs/domains, or scoping operations across the MSP portfolio. Use when: cipp tenant, list tenants, m365 tenant, tenant details, which tenants, all tenants, cipp portfolio, or msp tenant list.

CIPP Tenants

Tenants are the top-level scope in CIPP. Every operational tool — users, mailboxes, standards, security — takes a tenantFilter parameter that scopes the call to one tenant or to allTenants. Knowing how to enumerate tenants and resolve a friendly name to its tenant ID is the first step in almost every CIPP workflow.

Anti-triggers

  • Inforcer's tenant list — Inforcer manages the same M365 tenants but keys them by an integer Client Tenant ID, not a domain or GUID. A tenantFilter value from here will not work there; use inforcer-tenant-management.
  • Why a tenant is missing, stale, or failing — that is usually the GDAP delegation chain, not the tenant record; use cipp-ops.
  • A tenant's licence, standards, or CA posture — this skill only resolves and describes the tenant itself; use cipp-licenses, cipp-standards, or cipp-security.

Tools

cipp_list_tenants

List every tenant CIPP manages. Returns a list of tenant objects with customerId, defaultDomainName, displayName, and onboarding status.

cipp_list_tenants()

Use this whenever a user refers to a client by name — the response gives you the defaultDomainName (or customerId) needed for tenantFilter on every other tool.

cipp_get_tenant_details

Retrieve detailed information for one tenant: license count, domain list, GDAP relationship status, last refresh time.

cipp_get_tenant_details(tenantFilter='contoso.onmicrosoft.com')

Use tenantFilter='allTenants' to get a portfolio-wide aggregate — useful for fleet reports.

Identifying a tenant

Most CIPP tools accept any of these in tenantFilter:

FormatExampleNotes
Default domaincontoso.onmicrosoft.comMost readable, recommended
Custom domaincontoso.comWorks if CIPP has it cached
Tenant GUID00000000-0000-0000-0000-000000000000Most stable but opaque
allTenantsallTenantsPortfolio-wide; only some tools support it

When a user says "Acme", always run cipp_list_tenants first and resolve to the canonical defaultDomainName before calling other tools. Never guess the tenant identifier.

Common patterns

Resolve a friendly name → tenant filter

tenants = cipp_list_tenants()
acme = next(t for t in tenants if 'acme' in t['displayName'].lower())
tenant_filter = acme['defaultDomainName']

Audit which tenants are stale in CIPP cache

cipp_get_tenant_details returns lastRefresh. Tenants not refreshed in >24h often signal a broken GDAP relationship or revoked consent — flag them before running standards or BPA checks against them.

Failure modes

  • tenantFilter not found — the tenant exists in M365 but CIPP hasn't onboarded it. Trigger a tenant cache refresh in CIPP UI or check GDAP roles.
  • Empty tenant list — the API client has no tenant scope assigned. Check the role assigned to the API client in CIPP Settings → API Client Management.
我的收藏