@knowttl/mg-axi 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1138 -0
- package/dist/api.js +953 -0
- package/dist/app-auth.js +47 -0
- package/dist/auth.js +59 -0
- package/dist/bin/mg-axi.js +7 -0
- package/dist/catalogue.js +2191 -0
- package/dist/cli.js +1314 -0
- package/dist/docs.js +559 -0
- package/dist/doctor.js +75 -0
- package/dist/entra-access-reviews.js +425 -0
- package/dist/entra-apps.js +374 -0
- package/dist/entra-audit-logs.js +381 -0
- package/dist/entra-auth-methods.js +296 -0
- package/dist/entra-ca-policy-update.js +353 -0
- package/dist/entra-certificate-auth.js +384 -0
- package/dist/entra-conditional-access.js +317 -0
- package/dist/entra-contacts.js +827 -0
- package/dist/entra-contracts.js +252 -0
- package/dist/entra-custom-security-attributes.js +464 -0
- package/dist/entra-data-policy-operations.js +274 -0
- package/dist/entra-delegated-admin.js +468 -0
- package/dist/entra-deleted-items.js +461 -0
- package/dist/entra-directory-objects.js +274 -0
- package/dist/entra-directory.js +411 -0
- package/dist/entra-domains.js +399 -0
- package/dist/entra-entitlement-management.js +645 -0
- package/dist/entra-federation-configurations.js +290 -0
- package/dist/entra-grants.js +272 -0
- package/dist/entra-group-lifecycle.js +349 -0
- package/dist/entra-group-member-add.js +278 -0
- package/dist/entra-groups.js +336 -0
- package/dist/entra-identity-providers.js +297 -0
- package/dist/entra-lifecycle-workflows.js +673 -0
- package/dist/entra-multi-tenant-organization.js +309 -0
- package/dist/entra-on-premises-synchronization.js +231 -0
- package/dist/entra-organization.js +398 -0
- package/dist/entra-risk-dismiss.js +191 -0
- package/dist/entra-risk.js +404 -0
- package/dist/entra-roles.js +310 -0
- package/dist/entra-subscriptions.js +289 -0
- package/dist/entra-tenant-information.js +152 -0
- package/dist/entra-terms-of-use.js +380 -0
- package/dist/entra-user-revoke-sessions.js +170 -0
- package/dist/entra-user-update.js +170 -0
- package/dist/entra-users.js +211 -0
- package/dist/graph-session.js +1034 -0
- package/dist/msal-app-provider.js +42 -0
- package/dist/msal-provider.js +82 -0
- package/dist/mutations.js +529 -0
- package/dist/profiles.js +139 -0
- package/dist/setup.js +116 -0
- package/dist/version.js +2 -0
- package/docs/coverage.md +1028 -0
- package/inventory/operations.json +4 -0
- package/inventory/schema.json +71 -0
- package/package.json +32 -0
- package/skills/mg-axi/SKILL.md +293 -0
|
@@ -0,0 +1,2191 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { resolve, sep } from "node:path";
|
|
4
|
+
import { AxiError } from "axi-sdk-js";
|
|
5
|
+
// Use INV-01 identities and evidence directly; discovery never grants access.
|
|
6
|
+
const schema = JSON.parse(readFileSync(new URL("../inventory/schema.json", import.meta.url), "utf8"));
|
|
7
|
+
export const API_VERSIONS = schema.$defs.version.enum;
|
|
8
|
+
export const DESCRIPTION = "Inspect Microsoft Graph capabilities, read-only by default";
|
|
9
|
+
const common = {
|
|
10
|
+
profile: { value: "name", description: "Select a configured profile" },
|
|
11
|
+
"api-version": { value: API_VERSIONS.join("|"), default: "v1.0", description: "Explicit API version; no fallback" },
|
|
12
|
+
};
|
|
13
|
+
const PARSE_MODES = ["delegated", "application"];
|
|
14
|
+
const logRead = {
|
|
15
|
+
since: { value: "iso-time", description: "Required for a new query: earliest instant bounding the server time range; resume with --cursor instead of repeating it" },
|
|
16
|
+
until: { value: "iso-time", description: "Latest instant bounding the server time range; must be after --since" },
|
|
17
|
+
filter: { value: "odata-filter", description: "OData $filter combined with the time bounds; unsupported combinations fail before credentials" },
|
|
18
|
+
select: { value: "comma-separated-properties", description: "Request server properties; CA policy detail additionally needs a policy permission in both modes and a supported CA-data role for delegated access; request delegated policy access with --scopes https://graph.microsoft.com/AuditLog.Read.All,https://graph.microsoft.com/Policy.Read.All" },
|
|
19
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
20
|
+
full: { description: "Show complete text values without truncation; never lifts redaction, row caps or time bounds" },
|
|
21
|
+
cursor: { value: "opaque-cursor|-", description: "Resume a capped collection losslessly; - reads the token from stdin (16 MB ceiling for either input); repeat the original query flags or omit them" },
|
|
22
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to AuditLog.Read.All" },
|
|
23
|
+
};
|
|
24
|
+
const riskRead = {
|
|
25
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph; unsupported combinations fail before credentials" },
|
|
26
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the supported risk property set" },
|
|
27
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
28
|
+
full: { description: "Show complete text values without truncation; never lifts redaction, row caps or time bounds" },
|
|
29
|
+
cursor: { value: "opaque-cursor|-", description: "Resume a capped collection losslessly; - reads the token from stdin (16 MB ceiling for either input); repeat the original query flags or omit them" },
|
|
30
|
+
};
|
|
31
|
+
const userRead = {
|
|
32
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph; unsupported combinations fail before credentials" },
|
|
33
|
+
select: { value: "comma-separated-properties", description: "Request server properties; richer properties need User.Read.All, accountEnabled needs User.EnableDisableAccount.All" },
|
|
34
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
35
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
36
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
37
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to User.Read.All" },
|
|
38
|
+
};
|
|
39
|
+
const groupRead = {
|
|
40
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph with ConsistencyLevel eventual; unsupported combinations fail before credentials" },
|
|
41
|
+
select: { value: "comma-separated-properties", description: "Request server properties; richer group properties need Group.Read.All" },
|
|
42
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
43
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
44
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
45
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to GroupMember.Read.All, hidden members need Member.Read.Hidden" },
|
|
46
|
+
};
|
|
47
|
+
const appRead = {
|
|
48
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph with ConsistencyLevel eventual; unsupported combinations fail before credentials" },
|
|
49
|
+
select: { value: "comma-separated-properties", description: "Request server properties; credential fields carry expiry metadata only, never secret values" },
|
|
50
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
51
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
52
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
53
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Application.Read.All" },
|
|
54
|
+
};
|
|
55
|
+
const ownerRead = {
|
|
56
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph with ConsistencyLevel eventual; unsupported combinations fail before credentials" },
|
|
57
|
+
select: { value: "comma-separated-properties", description: "Request server properties from id, displayName, mail; richer owner fields need single-object reads" },
|
|
58
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
59
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
60
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
61
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Application.Read.All" },
|
|
62
|
+
};
|
|
63
|
+
const authMethodRead = {
|
|
64
|
+
select: { value: "comma-separated-properties", description: "Select output properties locally from the reviewed method set; phoneNumber is always redacted; no $select is sent to Graph" },
|
|
65
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must belong to the default or --select set" },
|
|
66
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
67
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
68
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to UserAuthenticationMethod.Read.All" },
|
|
69
|
+
};
|
|
70
|
+
const registrationRead = {
|
|
71
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter; unsupported combinations fail before credentials" },
|
|
72
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed report set" },
|
|
73
|
+
fields: authMethodRead.fields,
|
|
74
|
+
full: authMethodRead.full,
|
|
75
|
+
cursor: authMethodRead.cursor,
|
|
76
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to AuditLog.Read.All" },
|
|
77
|
+
};
|
|
78
|
+
const grantRead = {
|
|
79
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter; unsupported combinations fail before credentials" },
|
|
80
|
+
select: { value: "comma-separated-properties", description: "Request server properties from id, clientId, consentType, principalId, resourceId, scope" },
|
|
81
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
82
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
83
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
84
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Directory.Read.All; reads never request write-consent scopes" },
|
|
85
|
+
};
|
|
86
|
+
const appRoleGrantRead = {
|
|
87
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter; unsupported combinations fail before credentials" },
|
|
88
|
+
select: { value: "comma-separated-properties", description: "Request server properties from id, appRoleId, createdDateTime, principalDisplayName, principalId, principalType, resourceDisplayName, resourceId" },
|
|
89
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
90
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
91
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
92
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Application.Read.All; reads never request write-consent scopes" },
|
|
93
|
+
};
|
|
94
|
+
const roleRead = {
|
|
95
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter; unsupported combinations fail before credentials" },
|
|
96
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed role property set" },
|
|
97
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
98
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
99
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
100
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to the operation's least-privileged read scope" },
|
|
101
|
+
};
|
|
102
|
+
const deviceRead = {
|
|
103
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph with ConsistencyLevel eventual; unsupported combinations fail before credentials" },
|
|
104
|
+
select: { value: "comma-separated-properties", description: "Request server properties; directory-device reads need Device.Read.All" },
|
|
105
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
106
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
107
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
108
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Device.Read.All" },
|
|
109
|
+
};
|
|
110
|
+
const auRead = {
|
|
111
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph with ConsistencyLevel eventual; unsupported combinations fail before credentials" },
|
|
112
|
+
select: { value: "comma-separated-properties", description: "Request server properties; administrative-unit reads need AdministrativeUnit.Read.All" },
|
|
113
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
114
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
115
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
116
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to AdministrativeUnit.Read.All, hidden members need Member.Read.Hidden" },
|
|
117
|
+
};
|
|
118
|
+
const orgRead = {
|
|
119
|
+
select: { value: "comma-separated-properties", description: "Request server properties; full metadata needs Organization.Read.All (delegated User.Read returns only id, displayName and verifiedDomains, everything else null)" },
|
|
120
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
121
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
122
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
123
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Organization.Read.All" },
|
|
124
|
+
};
|
|
125
|
+
const brandingRead = {
|
|
126
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed non-Stream branding set; Stream image properties need a later piece and fail before credentials" },
|
|
127
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
128
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
129
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
130
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to User.Read, the documented least-privileged scope; OrganizationalBranding.Read.All is the purpose-built alternative" },
|
|
131
|
+
};
|
|
132
|
+
const domainRead = {
|
|
133
|
+
select: { value: "comma-separated-properties", description: "Request server properties; domain reads need Domain.Read.All" },
|
|
134
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
135
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
136
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
137
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Domain.Read.All" },
|
|
138
|
+
};
|
|
139
|
+
const dnsRead = {
|
|
140
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter; unsupported combinations fail before credentials" },
|
|
141
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed DNS record set; derived-type detail needs an explicit --select naming the derived property; domain DNS reads need Domain.Read.All" },
|
|
142
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
143
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
144
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
145
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Domain.Read.All" },
|
|
146
|
+
};
|
|
147
|
+
const certAuthRead = {
|
|
148
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter (eq, startswith); unsupported combinations fail before credentials" },
|
|
149
|
+
select: { value: "comma-separated-properties", description: "Request server properties; certificate-auth reads need PublicKeyInfrastructure.Read.All" },
|
|
150
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
151
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
152
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
153
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to PublicKeyInfrastructure.Read.All" },
|
|
154
|
+
};
|
|
155
|
+
const certAuthorityRead = {
|
|
156
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter; unsupported combinations fail before credentials" },
|
|
157
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed certificate-authority set; the public-certificate blob (certificate) is omitted by default and needs an explicit --select naming it; reads need PublicKeyInfrastructure.Read.All" },
|
|
158
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
159
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
160
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
161
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to PublicKeyInfrastructure.Read.All" },
|
|
162
|
+
};
|
|
163
|
+
const subscriptionRead = {
|
|
164
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter; unsupported combinations fail before credentials" },
|
|
165
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed subscription set; subscription reads need Organization.Read.All" },
|
|
166
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
167
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
168
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
169
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Organization.Read.All" },
|
|
170
|
+
};
|
|
171
|
+
const onPremSyncRead = {
|
|
172
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed on-premises-synchronization set; reads need delegated OnPremDirectorySynchronization.Read.All, and application profiles are refused before credentials" },
|
|
173
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
174
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
175
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
176
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to OnPremDirectorySynchronization.Read.All" },
|
|
177
|
+
};
|
|
178
|
+
const agreementRead = {
|
|
179
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter (eq); unsupported combinations fail before credentials" },
|
|
180
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed agreement set; reads need delegated Agreement.Read.All, and application profiles are refused before credentials" },
|
|
181
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
182
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
183
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
184
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Agreement.Read.All" },
|
|
185
|
+
};
|
|
186
|
+
const acceptanceRead = {
|
|
187
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter (eq, ge, le); unsupported combinations fail before credentials" },
|
|
188
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed acceptance set; acceptance records are personal data and default rows stay minimal, so identifying fields need an explicit --select naming them; reads need delegated AgreementAcceptance.Read, and application profiles are refused before credentials" },
|
|
189
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
190
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
191
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
192
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to AgreementAcceptance.Read, the documented least privilege (AgreementAcceptance.Read.All is the higher-privileged alternative)" },
|
|
193
|
+
};
|
|
194
|
+
const directoryObjectRead = {
|
|
195
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed base set (id, deletedDateTime); the @odata.type subtype discriminator rides along automatically and subtype properties need the subtype's named reads" },
|
|
196
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
197
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
198
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
199
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Directory.Read.All" },
|
|
200
|
+
};
|
|
201
|
+
const contactRead = {
|
|
202
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph with $count=true and ConsistencyLevel eventual; unsupported combinations fail before credentials" },
|
|
203
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed contact set; contacts are personal data and default rows stay minimal (id, displayName, mail, companyName), so identifying fields need an explicit --select naming them" },
|
|
204
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
205
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
206
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
207
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to OrgContact.Read.All, the documented least privilege" },
|
|
208
|
+
};
|
|
209
|
+
const contactMembershipRead = {
|
|
210
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph with $count=true and ConsistencyLevel eventual; unsupported combinations fail before credentials" },
|
|
211
|
+
select: { value: "comma-separated-properties", description: "Request server properties from id, displayName, mail; richer per-type fields need the subtype's single-object reads" },
|
|
212
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
213
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
214
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
215
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to OrgContact.Read.All, the documented least privilege (transitive reads additionally need Group.Read.All)" },
|
|
216
|
+
transitive: { description: "Read the flat transitive closure instead of direct memberships" },
|
|
217
|
+
as: { value: "group|administrativeUnit", description: "Return only this directory-object subtype via the typed cast route" },
|
|
218
|
+
};
|
|
219
|
+
const contactNavRead = {
|
|
220
|
+
select: { value: "comma-separated-properties", description: "Request server properties from id, displayName, mail; richer per-type fields need the subtype's single-object reads" },
|
|
221
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
222
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
223
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
224
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to OrgContact.Read.All, the documented least privilege" },
|
|
225
|
+
as: { value: "user|orgContact", description: "Return only this directory-object subtype via the typed cast route" },
|
|
226
|
+
};
|
|
227
|
+
const lifecycleRead = {
|
|
228
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter; unsupported combinations fail before credentials" },
|
|
229
|
+
select: { value: "comma-separated-properties", description: "Request server properties; lifecycle-policy reads need Directory.Read.All" },
|
|
230
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
231
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
232
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
233
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Directory.Read.All" },
|
|
234
|
+
};
|
|
235
|
+
const templateRead = {
|
|
236
|
+
select: { value: "comma-separated-properties", description: "Request server properties; setting-template reads need GroupSettings.Read.All" },
|
|
237
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
238
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
239
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
240
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to GroupSettings.Read.All" },
|
|
241
|
+
};
|
|
242
|
+
const contractRead = {
|
|
243
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter; filtering is documented for customerId, defaultDomainName and displayName; unsupported combinations fail before credentials" },
|
|
244
|
+
select: { value: "comma-separated-properties", description: "Request server properties; contract reads need Directory.Read.All" },
|
|
245
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
246
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
247
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
248
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Directory.Read.All" },
|
|
249
|
+
};
|
|
250
|
+
const delegatedAdminRead = {
|
|
251
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter with no $count or ConsistencyLevel contract; unsupported combinations fail before credentials" },
|
|
252
|
+
select: { value: "comma-separated-properties", description: "Request server properties; delegated-admin reads need DelegatedAdminRelationship.Read.All" },
|
|
253
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
254
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
255
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
256
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to DelegatedAdminRelationship.Read.All" },
|
|
257
|
+
};
|
|
258
|
+
// serviceManagementDetails documents no query parameters, so these reads
|
|
259
|
+
// declare no --select/--filter and project whole rows locally instead.
|
|
260
|
+
const delegatedAdminQuerylessRead = {
|
|
261
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; rows always arrive whole because Graph documents no query parameters here" },
|
|
262
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
263
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
264
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to DelegatedAdminRelationship.Read.All" },
|
|
265
|
+
};
|
|
266
|
+
const multiTenantOrganizationRead = {
|
|
267
|
+
select: { value: "comma-separated-properties", description: "Request server properties; multi-tenant-organization reads need MultiTenantOrganization.Read.All" },
|
|
268
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
269
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
270
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to MultiTenantOrganization.Read.All" },
|
|
271
|
+
};
|
|
272
|
+
const multiTenantOrganizationTenantRead = {
|
|
273
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter with no $count or ConsistencyLevel contract; unsupported combinations fail before credentials" },
|
|
274
|
+
select: multiTenantOrganizationRead.select,
|
|
275
|
+
fields: multiTenantOrganizationRead.fields,
|
|
276
|
+
full: multiTenantOrganizationRead.full,
|
|
277
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
278
|
+
scopes: multiTenantOrganizationRead.scopes,
|
|
279
|
+
};
|
|
280
|
+
const tenantInformationRead = {
|
|
281
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
282
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to CrossTenantInformation.ReadBasic.All" },
|
|
283
|
+
};
|
|
284
|
+
const attributeSetRead = {
|
|
285
|
+
select: { value: "comma-separated-properties", description: "Request server properties; attribute-set reads need CustomSecAttributeDefinition.Read.All" },
|
|
286
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
287
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
288
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
289
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to CustomSecAttributeDefinition.Read.All" },
|
|
290
|
+
};
|
|
291
|
+
const customSecurityDefinitionRead = {
|
|
292
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter (eq); unsupported combinations fail before credentials" },
|
|
293
|
+
select: { value: "comma-separated-properties", description: "Request server properties; definition reads need CustomSecAttributeDefinition.Read.All" },
|
|
294
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
295
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
296
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
297
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to CustomSecAttributeDefinition.Read.All" },
|
|
298
|
+
};
|
|
299
|
+
const allowedValueRead = {
|
|
300
|
+
select: { value: "comma-separated-properties", description: "Request server properties; allowed-value reads need CustomSecAttributeDefinition.Read.All" },
|
|
301
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
302
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
303
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
304
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to CustomSecAttributeDefinition.Read.All" },
|
|
305
|
+
};
|
|
306
|
+
const caRead = {
|
|
307
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph; unsupported combinations fail before credentials" },
|
|
308
|
+
select: { value: "comma-separated-properties", description: "Request server properties; policy and location detail needs Policy.Read.All in both modes plus a supported Conditional Access role for delegated access" },
|
|
309
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
310
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
311
|
+
cursor: { value: "opaque-cursor|-", description: "Resume a capped collection losslessly; - reads the token from stdin (16 MB ceiling for either input); repeat the original query flags or omit them" },
|
|
312
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Policy.Read.All" },
|
|
313
|
+
};
|
|
314
|
+
const providerRead = {
|
|
315
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter; unsupported combinations fail before credentials" },
|
|
316
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed identity-provider set; secret-bearing fields (clientSecret, certificateData) are never selectable" },
|
|
317
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
318
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
319
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
320
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to IdentityProvider.Read.All" },
|
|
321
|
+
};
|
|
322
|
+
const federationRead = {
|
|
323
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter; unsupported combinations fail before credentials" },
|
|
324
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed federation-configuration set; the public signingCertificate blob needs an explicit --select naming it" },
|
|
325
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
326
|
+
full: { description: "Show complete text values without truncation; never lifts row caps" },
|
|
327
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
328
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Domain.Read.All (available-types defaults to IdentityProvider.Read.All)" },
|
|
329
|
+
};
|
|
330
|
+
const deletedItemRead = {
|
|
331
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed per-type deleted-item set; credential collections are never selectable" },
|
|
332
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
333
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
334
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
335
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to the listed type's least-privileged read scope" },
|
|
336
|
+
};
|
|
337
|
+
const dataPolicyRead = {
|
|
338
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed data-policy-operation set; storageLocation always renders redacted and export submission is never sent" },
|
|
339
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
340
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
341
|
+
cursor: { value: "opaque-cursor", description: "Resume a capped collection losslessly; repeat the original query flags or omit them" },
|
|
342
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to User.Export.All, User.Read.All" },
|
|
343
|
+
};
|
|
344
|
+
const accessReviewRead = {
|
|
345
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter; on definitions only contains() over the scope query and eq on status are documented; unsupported combinations fail before credentials" },
|
|
346
|
+
filterReviewer: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter with no $count or ConsistencyLevel; unsupported combinations fail before credentials" },
|
|
347
|
+
filterStage: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter (eq only); unsupported combinations fail before credentials" },
|
|
348
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed access-review set; reads need AccessReview.Read.All in both modes plus a supported Entra role for delegated access" },
|
|
349
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
350
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
351
|
+
cursor: { value: "opaque-cursor|-", description: "Resume a capped collection losslessly; - reads the token from stdin (16 MB ceiling for either input); repeat the original query flags or omit them" },
|
|
352
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to AccessReview.Read.All" },
|
|
353
|
+
};
|
|
354
|
+
const entitlementRead = {
|
|
355
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter with no $count or ConsistencyLevel; unsupported combinations fail before credentials" },
|
|
356
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed entitlement set; reads need EntitlementManagement.Read.All in both modes plus a supported Entra role with catalog visibility for delegated access" },
|
|
357
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
358
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
359
|
+
cursor: { value: "opaque-cursor|-", description: "Resume a capped collection losslessly; - reads the token from stdin (16 MB ceiling for either input); repeat the original query flags or omit them" },
|
|
360
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to EntitlementManagement.Read.All" },
|
|
361
|
+
};
|
|
362
|
+
const lifecycleWorkflowRead = {
|
|
363
|
+
filter: { value: "odata-filter", description: "OData $filter passed to Graph as plain $filter with no $count or ConsistencyLevel; unsupported combinations fail before credentials" },
|
|
364
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed workflow set; reads default to LifecycleWorkflows-Workflow.ReadBasic.All in both modes (richer detail may need LifecycleWorkflows-Workflow.Read.All or LifecycleWorkflows.Read.All) plus Global Reader or Lifecycle Workflows Administrator for delegated access" },
|
|
365
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
366
|
+
full: { description: "Show complete text values without truncation; never lifts redaction or row caps" },
|
|
367
|
+
cursor: { value: "opaque-cursor|-", description: "Resume a capped collection losslessly; - reads the token from stdin (16 MB ceiling for either input); repeat the original query flags or omit them" },
|
|
368
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to LifecycleWorkflows-Workflow.ReadBasic.All" },
|
|
369
|
+
};
|
|
370
|
+
const lifecycleGovernanceRead = {
|
|
371
|
+
filter: lifecycleWorkflowRead.filter,
|
|
372
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed lifecycle set; reads need LifecycleWorkflows.Read.All in both modes plus Global Reader or Lifecycle Workflows Administrator for delegated access" },
|
|
373
|
+
fields: lifecycleWorkflowRead.fields,
|
|
374
|
+
full: lifecycleWorkflowRead.full,
|
|
375
|
+
cursor: lifecycleWorkflowRead.cursor,
|
|
376
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to LifecycleWorkflows.Read.All" },
|
|
377
|
+
};
|
|
378
|
+
const lifecycleReportsRead = {
|
|
379
|
+
workflow: { value: "workflow-id", required: true, description: "Parent lifecycle workflow ID owning the run or processing result" },
|
|
380
|
+
filter: lifecycleWorkflowRead.filter,
|
|
381
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed reporting set; reads default to LifecycleWorkflows-Reports.Read.All in both modes (richer detail may need LifecycleWorkflows.Read.All or LifecycleWorkflows.ReadWrite.All) plus Global Reader or Lifecycle Workflows Administrator for delegated access" },
|
|
382
|
+
fields: lifecycleWorkflowRead.fields,
|
|
383
|
+
full: lifecycleWorkflowRead.full,
|
|
384
|
+
cursor: lifecycleWorkflowRead.cursor,
|
|
385
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to LifecycleWorkflows-Reports.Read.All" },
|
|
386
|
+
};
|
|
387
|
+
const lifecycleSubjectRead = {
|
|
388
|
+
workflow: { value: "workflow-id", required: true, description: "Parent lifecycle workflow ID owning the subject processing result" },
|
|
389
|
+
filter: lifecycleWorkflowRead.filter,
|
|
390
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally from the reviewed subject set; Graph documents no $select here so rows always arrive whole" },
|
|
391
|
+
full: lifecycleWorkflowRead.full,
|
|
392
|
+
cursor: lifecycleWorkflowRead.cursor,
|
|
393
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to LifecycleWorkflows-Reports.Read.All" },
|
|
394
|
+
};
|
|
395
|
+
const lifecycleTaskReportRead = {
|
|
396
|
+
workflow: { value: "workflow-id", required: true, description: "Parent lifecycle workflow ID owning the task report" },
|
|
397
|
+
filter: lifecycleWorkflowRead.filter,
|
|
398
|
+
select: lifecycleReportsRead.select,
|
|
399
|
+
fields: lifecycleWorkflowRead.fields,
|
|
400
|
+
full: lifecycleWorkflowRead.full,
|
|
401
|
+
cursor: lifecycleWorkflowRead.cursor,
|
|
402
|
+
scopes: lifecycleReportsRead.scopes,
|
|
403
|
+
};
|
|
404
|
+
const lifecycleTaskReportShow = {
|
|
405
|
+
workflow: { value: "workflow-id", required: true, description: "Parent lifecycle workflow ID owning the task report" },
|
|
406
|
+
id: { value: "task-report-id", required: true, description: "Task report ID" },
|
|
407
|
+
fields: { value: "comma-separated-properties", description: "Project the returned row locally from the reviewed task-report set; Graph documents no query parameters here so rows always arrive whole" },
|
|
408
|
+
full: lifecycleWorkflowRead.full,
|
|
409
|
+
scopes: lifecycleReportsRead.scopes,
|
|
410
|
+
};
|
|
411
|
+
const lifecycleTaskReportSubRead = {
|
|
412
|
+
workflow: { value: "workflow-id", required: true, description: "Parent lifecycle workflow ID owning the task report" },
|
|
413
|
+
report: { value: "task-report-id", required: true, description: "Parent task report ID owning the task or task definition" },
|
|
414
|
+
fields: { value: "comma-separated-properties", description: "Project the returned row locally from the reviewed set; Graph documents no query parameters here so rows always arrive whole" },
|
|
415
|
+
full: lifecycleWorkflowRead.full,
|
|
416
|
+
scopes: lifecycleReportsRead.scopes,
|
|
417
|
+
};
|
|
418
|
+
export const LEAVES = [
|
|
419
|
+
{ path: "home", description: "Show local profile status without authenticating", flags: { profile: common.profile }, examples: ["mg-axi", "mg-axi home --profile soc"] },
|
|
420
|
+
{ path: "profile create", description: "Create a dedicated-app profile without signing in", flags: {
|
|
421
|
+
name: { value: "name", required: true, description: "New profile name; existing identities cannot be overwritten" },
|
|
422
|
+
tenant: { value: "tenant-id", required: true, description: "Explicit workforce tenant UUID" },
|
|
423
|
+
client: { value: "client-id", required: true, description: "Organization-owned application UUID" },
|
|
424
|
+
cloud: { value: "commercial", required: true, description: "Explicit cloud; only commercial is supported" },
|
|
425
|
+
mode: { value: "delegated|application", default: "delegated", description: "Delegated analyst sign-in or application client credentials" },
|
|
426
|
+
"allow-device-code": { description: "Delegated only: opt in only when permitted by organization policy; never enables fallback" },
|
|
427
|
+
"certificate-thumbprint": { value: "40-hex-digits", description: "Application only: certificate thumbprint; the private key stays in protected storage" },
|
|
428
|
+
federated: { description: "Application only: workload federation via the AZURE_FEDERATED_TOKEN_FILE assertion source" },
|
|
429
|
+
}, examples: ["mg-axi profile create --name soc --tenant <tenant-id> --client <client-id> --cloud commercial", "mg-axi profile create --name batch --tenant <tenant-id> --client <client-id> --cloud commercial --mode application --federated", "mg-axi profile create --help"] },
|
|
430
|
+
{ path: "profile list", description: "List configured profiles without accessing credentials", flags: {}, examples: ["mg-axi profile list", "mg-axi profile list --help"] },
|
|
431
|
+
{ path: "profile show", description: "Show profile policy and credential reference, never credentials", flags: {
|
|
432
|
+
profile: common.profile,
|
|
433
|
+
}, examples: ["mg-axi profile show --profile soc", "mg-axi profile show"] },
|
|
434
|
+
{ path: "login", description: "Explicit delegated login; browser by default, no automatic device-code fallback", flags: {
|
|
435
|
+
profile: common.profile,
|
|
436
|
+
method: { value: "browser|device-code", default: "browser", description: "Device code additionally requires profile opt-in" },
|
|
437
|
+
scopes: { value: "comma-separated-Graph-scopes", required: true, description: "Explicit delegated permissions using full https://graph.microsoft.com/ scope names" },
|
|
438
|
+
}, examples: ["mg-axi login --profile soc --scopes https://graph.microsoft.com/User.Read", "mg-axi login --profile soc --method device-code --scopes https://graph.microsoft.com/User.Read"] },
|
|
439
|
+
{ path: "setup", description: "Show installation, configuration and capability guidance without signing in or writing anything", flags: {}, examples: ["mg-axi setup", "mg-axi setup --help"] },
|
|
440
|
+
{ path: "doctor", description: "Check each selected profile with one bounded user-list read; never signs in interactively, installs nothing, enables no writes", flags: {
|
|
441
|
+
profile: common.profile,
|
|
442
|
+
}, examples: ["mg-axi doctor", "mg-axi doctor --profile soc", "mg-axi doctor --help"] },
|
|
443
|
+
{ path: "entra user list", description: "List users with basic properties (id, displayName, userPrincipalName, mail)", operation: "GET:/users", flags: {
|
|
444
|
+
...common,
|
|
445
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
446
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
447
|
+
filter: userRead.filter,
|
|
448
|
+
select: userRead.select,
|
|
449
|
+
fields: userRead.fields,
|
|
450
|
+
full: userRead.full,
|
|
451
|
+
cursor: userRead.cursor,
|
|
452
|
+
scopes: userRead.scopes,
|
|
453
|
+
}, examples: ["mg-axi entra user list --profile soc", "mg-axi entra user list --profile soc --limit 10", "mg-axi entra user list --profile soc --filter \"accountEnabled eq true\" --select id,displayName,accountEnabled"] },
|
|
454
|
+
{ path: "entra user show", description: "Show one user with richer default properties", operation: "GET:/users/{user-id}", flags: {
|
|
455
|
+
...common, id: { value: "user-id-or-upn", required: true, description: "User object ID or UPN" },
|
|
456
|
+
select: userRead.select,
|
|
457
|
+
fields: userRead.fields,
|
|
458
|
+
full: userRead.full,
|
|
459
|
+
scopes: userRead.scopes,
|
|
460
|
+
}, examples: ["mg-axi entra user show --id <user-id-or-upn> --profile soc", "mg-axi entra user show --id <user-id-or-upn> --profile soc --full"] },
|
|
461
|
+
{ path: "entra user update", description: "Set one user's accountEnabled (WRITE-02): desired-state preview, no-op when already set, conflict on reread mismatch; enabling and disabling are disruptive and need typed confirmation", operation: "PATCH:/users/{user-id}", flags: {
|
|
462
|
+
...common,
|
|
463
|
+
user: { value: "user-id-or-upn", required: true, description: "User object ID or UPN whose account is enabled or disabled" },
|
|
464
|
+
"account-enabled": { value: "true|false", required: true, description: "Desired account state; both enabling and disabling are disruptive" },
|
|
465
|
+
execute: { description: "Send the PATCH after preview; without it the command only previews the desired-state diff and journals nothing" },
|
|
466
|
+
confirm: { value: "user-id-or-upn", description: "Required with --execute: repeat the --user value exactly" },
|
|
467
|
+
}, examples: ["mg-axi entra user update --user <user-id-or-upn> --account-enabled false --profile soc", "mg-axi entra user update --user <user-id-or-upn> --account-enabled false --execute --confirm '<user-id-or-upn>' --profile soc", "mg-axi entra user update --user <user-id-or-upn> --account-enabled true --execute --confirm '<user-id-or-upn>' --profile soc"] },
|
|
468
|
+
{ path: "entra user revoke-sessions", description: "Revoke one user's sign-in sessions (WRITE-03): action preview states what happens and that it cannot be undone; revocation can lag minutes and never touches external users' home-tenant sessions; D/A User.RevokeSessions.All; disruptive, needs typed confirmation", operation: "POST:/users/{user-id}/revokeSignInSessions", flags: {
|
|
469
|
+
...common,
|
|
470
|
+
user: { value: "user-object-id", required: true, description: "User object ID whose sessions are revoked; verified as a user before preview and sending; UPNs are not resolved" },
|
|
471
|
+
execute: { description: "Send after preview; without it the command only previews the action and journals nothing" },
|
|
472
|
+
confirm: { value: "user-object-id", description: "Required with --execute: repeat the --user ID exactly" },
|
|
473
|
+
}, examples: ["mg-axi entra user revoke-sessions --user <user-id> --profile soc", "mg-axi entra user revoke-sessions --user <user-id> --profile soc --execute --confirm <user-id>"] },
|
|
474
|
+
{ path: "entra user authentication-method list", description: "List authentication methods for one named user (id, displayName, createdDateTime); targeted inspection only, never a tenant scan; phone numbers redacted", operation: "GET:/users/{user-id}/authentication/methods", flags: {
|
|
475
|
+
...common, user: { value: "user-id-or-upn", required: true, description: "User object ID or UPN whose methods are listed" },
|
|
476
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
477
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
478
|
+
select: authMethodRead.select,
|
|
479
|
+
fields: authMethodRead.fields,
|
|
480
|
+
full: authMethodRead.full,
|
|
481
|
+
cursor: authMethodRead.cursor,
|
|
482
|
+
scopes: authMethodRead.scopes,
|
|
483
|
+
}, examples: ["mg-axi entra user authentication-method list --user <user-id> --profile soc", "mg-axi entra user authentication-method list --user <user-id> --profile soc --select id,displayName,phoneType"] },
|
|
484
|
+
{ path: "entra registration list", description: "List the tenant authentication-method registration report (MFA/SSPR posture); the report does not cover disabled users", operation: "GET:/reports/authenticationMethods/userRegistrationDetails", flags: {
|
|
485
|
+
...common,
|
|
486
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
487
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
488
|
+
filter: registrationRead.filter,
|
|
489
|
+
select: registrationRead.select,
|
|
490
|
+
fields: registrationRead.fields,
|
|
491
|
+
full: registrationRead.full,
|
|
492
|
+
cursor: registrationRead.cursor,
|
|
493
|
+
scopes: registrationRead.scopes,
|
|
494
|
+
}, examples: ["mg-axi entra registration list --profile soc", "mg-axi entra registration list --profile soc --filter \"isMfaRegistered eq false\""] },
|
|
495
|
+
{ path: "entra group list", description: "List groups with compact properties (id, displayName, mail, groupTypes)", operation: "GET:/groups", flags: {
|
|
496
|
+
...common,
|
|
497
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
498
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
499
|
+
filter: groupRead.filter,
|
|
500
|
+
select: groupRead.select,
|
|
501
|
+
fields: groupRead.fields,
|
|
502
|
+
full: groupRead.full,
|
|
503
|
+
cursor: groupRead.cursor,
|
|
504
|
+
scopes: groupRead.scopes,
|
|
505
|
+
}, examples: ["mg-axi entra group list --profile soc", "mg-axi entra group list --profile soc --limit 10", "mg-axi entra group list --profile soc --filter \"securityEnabled eq true\" --select id,displayName,isAssignableToRole"] },
|
|
506
|
+
{ path: "entra group show", description: "Show one group with richer default properties including isAssignableToRole", operation: "GET:/groups/{group-id}", flags: {
|
|
507
|
+
...common, id: { value: "group-id", required: true, description: "Group object ID" },
|
|
508
|
+
select: groupRead.select,
|
|
509
|
+
fields: groupRead.fields,
|
|
510
|
+
full: groupRead.full,
|
|
511
|
+
scopes: groupRead.scopes,
|
|
512
|
+
}, examples: ["mg-axi entra group show --id <group-id> --profile soc", "mg-axi entra group show --id <group-id> --profile soc --full"] },
|
|
513
|
+
{ path: "entra group member list", description: "List direct group members; --transitive flattens nested membership. Hidden members are omitted without Member.Read.Hidden; v1.0 may omit service principals", operation: "GET:/groups/{group-id}/members", flags: {
|
|
514
|
+
...common, group: { value: "group-id", required: true, description: "Group object ID whose members are listed" },
|
|
515
|
+
transitive: { description: "List the flat transitive closure instead of direct members" },
|
|
516
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
517
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
518
|
+
filter: groupRead.filter,
|
|
519
|
+
select: { value: "comma-separated-properties", description: "Request server properties from id, displayName, mail; richer member fields need single-object reads" },
|
|
520
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
521
|
+
full: groupRead.full,
|
|
522
|
+
cursor: groupRead.cursor,
|
|
523
|
+
scopes: groupRead.scopes,
|
|
524
|
+
}, examples: ["mg-axi entra group member list --group <group-id> --profile soc", "mg-axi entra group member list --group <group-id> --transitive --profile soc"] },
|
|
525
|
+
{ path: "entra group member-of list", description: "List groups the group is a member of; --transitive flattens nested membership. Hidden memberships are omitted without Member.Read.Hidden", operation: "GET:/groups/{group-id}/memberOf", flags: {
|
|
526
|
+
...common, group: { value: "group-id", required: true, description: "Group object ID whose memberships are listed" },
|
|
527
|
+
transitive: { description: "List the flat transitive closure instead of direct memberships" },
|
|
528
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
529
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
530
|
+
filter: groupRead.filter,
|
|
531
|
+
select: { value: "comma-separated-properties", description: "Request server properties from id, displayName, mail; richer member fields need single-object reads" },
|
|
532
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
533
|
+
full: groupRead.full,
|
|
534
|
+
cursor: groupRead.cursor,
|
|
535
|
+
scopes: groupRead.scopes,
|
|
536
|
+
}, examples: ["mg-axi entra group member-of list --group <group-id> --profile soc", "mg-axi entra group member-of list --group <group-id> --transitive --profile soc"] },
|
|
537
|
+
{ path: "entra group member add", description: "Add one user to a non-role-assignable security or Microsoft 365 group (WRITE-01). User members need D/A GroupMember.ReadWrite.All; delegated callers additionally need a groups role such as Groups Administrator. Role-assignable, dynamic and distribution groups are refused before sending; an already-member user is a no-op", operation: "POST:/groups/{group-id}/members/$ref", flags: {
|
|
538
|
+
...common,
|
|
539
|
+
group: { value: "group-id", required: true, description: "Group object ID that gains the member; --confirm repeats this ID" },
|
|
540
|
+
user: { value: "user-object-id", required: true, description: "User object ID verified before preview and sending; user reads need delegated User.ReadBasic.All or application User.Read.All; the write uses a directoryObjects $ref; UPNs are not resolved" },
|
|
541
|
+
execute: { description: "Send after preview; without it only previews and journals nothing" },
|
|
542
|
+
confirm: { value: "group-id", description: "Required with --execute: repeat the --group ID to confirm this access change" },
|
|
543
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to GroupMember.ReadWrite.All" },
|
|
544
|
+
}, examples: ["mg-axi entra group member add --group <group-id> --user <user-id> --profile soc", "mg-axi entra group member add --group <group-id> --user <user-id> --profile soc --execute --confirm <group-id>"] },
|
|
545
|
+
{ path: "entra directory-role list", description: "List activated directory roles (id, displayName, description, roleTemplateId); roles appear only after activation", operation: "GET:/directoryRoles", flags: {
|
|
546
|
+
...common,
|
|
547
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
548
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
549
|
+
filter: roleRead.filter,
|
|
550
|
+
select: roleRead.select,
|
|
551
|
+
fields: roleRead.fields,
|
|
552
|
+
full: roleRead.full,
|
|
553
|
+
cursor: roleRead.cursor,
|
|
554
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to RoleManagement.Read.Directory; delegated callers also need a supported directory role" },
|
|
555
|
+
}, examples: ["mg-axi entra directory-role list --profile soc", "mg-axi entra directory-role list --profile soc --filter \"displayName eq 'Global Administrator'\""] },
|
|
556
|
+
{ path: "entra directory-role show", description: "Show one activated directory role with richer default properties", operation: "GET:/directoryRoles/{directoryRole-id}", flags: {
|
|
557
|
+
...common, id: { value: "role-id", required: true, description: "Activated directory-role object ID" },
|
|
558
|
+
select: roleRead.select,
|
|
559
|
+
fields: roleRead.fields,
|
|
560
|
+
full: roleRead.full,
|
|
561
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to RoleManagement.Read.Directory; delegated callers also need a supported directory role" },
|
|
562
|
+
}, examples: ["mg-axi entra directory-role show --id <role-id> --profile soc", "mg-axi entra directory-role show --id <role-id> --profile soc --full"] },
|
|
563
|
+
{ path: "entra role-assignment list", description: "List current role assignments (id, principalId, roleDefinitionId, directoryScopeId), including direct and PIM-activated assignments; use pim active list for assignmentType Assigned versus Activated", operation: "GET:/roleManagement/directory/roleAssignments", flags: {
|
|
564
|
+
...common,
|
|
565
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
566
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
567
|
+
filter: roleRead.filter,
|
|
568
|
+
select: roleRead.select,
|
|
569
|
+
fields: roleRead.fields,
|
|
570
|
+
full: roleRead.full,
|
|
571
|
+
cursor: roleRead.cursor,
|
|
572
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to RoleManagement.Read.Directory; delegated callers also need Directory Readers, Global Reader or Privileged Role Administrator" },
|
|
573
|
+
}, examples: ["mg-axi entra role-assignment list --profile soc", "mg-axi entra role-assignment list --profile soc --filter \"principalId eq '<principal-id>'\""] },
|
|
574
|
+
{ path: "entra pim eligible list", description: "List PIM-eligible assignments, which are not active; activation is a PIM workflow outside these reads", operation: "GET:/roleManagement/directory/roleEligibilityScheduleInstances", flags: {
|
|
575
|
+
...common,
|
|
576
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
577
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
578
|
+
filter: roleRead.filter,
|
|
579
|
+
select: roleRead.select,
|
|
580
|
+
fields: roleRead.fields,
|
|
581
|
+
full: roleRead.full,
|
|
582
|
+
cursor: roleRead.cursor,
|
|
583
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to RoleEligibilitySchedule.Read.Directory; delegated callers also need a supported PIM read role; PIM needs P2 or ID Governance" },
|
|
584
|
+
}, examples: ["mg-axi entra pim eligible list --profile soc", "mg-axi entra pim eligible list --profile soc --filter \"roleDefinitionId eq '<role-definition-id>'\""] },
|
|
585
|
+
{ path: "entra pim active list", description: "List active assignments: directly assigned plus activated eligible, distinguished by assignmentType Assigned versus Activated", operation: "GET:/roleManagement/directory/roleAssignmentScheduleInstances", flags: {
|
|
586
|
+
...common,
|
|
587
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
588
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
589
|
+
filter: roleRead.filter,
|
|
590
|
+
select: roleRead.select,
|
|
591
|
+
fields: roleRead.fields,
|
|
592
|
+
full: roleRead.full,
|
|
593
|
+
cursor: roleRead.cursor,
|
|
594
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to RoleAssignmentSchedule.Read.Directory; delegated callers also need a supported PIM read role; PIM needs P2 or ID Governance" },
|
|
595
|
+
}, examples: ["mg-axi entra pim active list --profile soc", "mg-axi entra pim active list --profile soc --filter \"assignmentType eq 'Activated'\""] },
|
|
596
|
+
{ path: "entra device list", description: "List directory devices with compact properties (id, displayName, operatingSystem, accountEnabled). Directory-device scope only; Intune managed devices are a separately authorized surface", operation: "GET:/devices", flags: {
|
|
597
|
+
...common,
|
|
598
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
599
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
600
|
+
filter: deviceRead.filter,
|
|
601
|
+
select: deviceRead.select,
|
|
602
|
+
fields: deviceRead.fields,
|
|
603
|
+
full: deviceRead.full,
|
|
604
|
+
cursor: deviceRead.cursor,
|
|
605
|
+
scopes: deviceRead.scopes,
|
|
606
|
+
}, examples: ["mg-axi entra device list --profile soc", "mg-axi entra device list --profile soc --limit 10", "mg-axi entra device list --profile soc --filter \"isCompliant eq true\" --select id,displayName,isCompliant"] },
|
|
607
|
+
{ path: "entra device show", description: "Show one directory device with the full reviewed property set; deviceId is the directory device identifier and id is the object ID", operation: "GET:/devices/{device-id}", flags: {
|
|
608
|
+
...common, id: { value: "device-id", required: true, description: "Device object ID" },
|
|
609
|
+
select: deviceRead.select,
|
|
610
|
+
fields: deviceRead.fields,
|
|
611
|
+
full: deviceRead.full,
|
|
612
|
+
scopes: deviceRead.scopes,
|
|
613
|
+
}, examples: ["mg-axi entra device show --id <device-id> --profile soc", "mg-axi entra device show --id <device-id> --profile soc --full"] },
|
|
614
|
+
{ path: "entra administrative-unit list", description: "List administrative units with compact properties (id, displayName, visibility, membershipType)", operation: "GET:/directory/administrativeUnits", flags: {
|
|
615
|
+
...common,
|
|
616
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
617
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
618
|
+
filter: auRead.filter,
|
|
619
|
+
select: auRead.select,
|
|
620
|
+
fields: auRead.fields,
|
|
621
|
+
full: auRead.full,
|
|
622
|
+
cursor: auRead.cursor,
|
|
623
|
+
scopes: auRead.scopes,
|
|
624
|
+
}, examples: ["mg-axi entra administrative-unit list --profile soc", "mg-axi entra administrative-unit list --profile soc --limit 10", "mg-axi entra administrative-unit list --profile soc --filter \"displayName eq 'Seattle Schools'\""] },
|
|
625
|
+
{ path: "entra administrative-unit show", description: "Show one administrative unit with the full reviewed property set including visibility and membership rule", operation: "GET:/directory/administrativeUnits/{administrativeUnit-id}", flags: {
|
|
626
|
+
...common, id: { value: "administrative-unit-id", required: true, description: "Administrative unit object ID" },
|
|
627
|
+
select: auRead.select,
|
|
628
|
+
fields: auRead.fields,
|
|
629
|
+
full: auRead.full,
|
|
630
|
+
scopes: auRead.scopes,
|
|
631
|
+
}, examples: ["mg-axi entra administrative-unit show --id <administrative-unit-id> --profile soc", "mg-axi entra administrative-unit show --id <administrative-unit-id> --profile soc --full"] },
|
|
632
|
+
{ path: "entra administrative-unit member list", description: "List administrative-unit members (users, groups, devices). Hidden memberships are omitted without Member.Read.Hidden; app callers with narrow consent receive limited-information rows", operation: "GET:/directory/administrativeUnits/{administrativeUnit-id}/members", flags: {
|
|
633
|
+
...common, "administrative-unit": { value: "administrative-unit-id", required: true, description: "Administrative unit object ID whose members are listed" },
|
|
634
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
635
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
636
|
+
filter: auRead.filter,
|
|
637
|
+
select: { value: "comma-separated-properties", description: "Request server properties from id, displayName, mail; richer member fields need single-object reads" },
|
|
638
|
+
fields: { value: "comma-separated-properties", description: "Project returned rows locally; every field must be fetched via the default or --select set" },
|
|
639
|
+
full: auRead.full,
|
|
640
|
+
cursor: auRead.cursor,
|
|
641
|
+
scopes: auRead.scopes,
|
|
642
|
+
}, examples: ["mg-axi entra administrative-unit member list --administrative-unit <administrative-unit-id> --profile soc", "mg-axi entra administrative-unit member list --administrative-unit <administrative-unit-id> --profile soc --limit 10"] },
|
|
643
|
+
{ path: "entra organization list", description: "List tenant organizations with compact properties (id, displayName, tenantType, verifiedDomains); exactly one row exists per tenant; --filter is unsupported on /organization (Graph documents $select only)", operation: "GET:/organization", flags: {
|
|
644
|
+
...common,
|
|
645
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
646
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
647
|
+
select: orgRead.select,
|
|
648
|
+
fields: orgRead.fields,
|
|
649
|
+
full: orgRead.full,
|
|
650
|
+
cursor: orgRead.cursor,
|
|
651
|
+
scopes: orgRead.scopes,
|
|
652
|
+
}, examples: ["mg-axi entra organization list --profile soc", "mg-axi entra organization list --profile soc --select id,displayName,technicalNotificationMails"] },
|
|
653
|
+
{ path: "entra organization show", description: "Show one tenant organization with the full reviewed property set including technical notification mails and privacy profile", operation: "GET:/organization/{organization-id}", flags: {
|
|
654
|
+
...common, id: { value: "organization-id", required: true, description: "Tenant organization UUID" },
|
|
655
|
+
select: orgRead.select,
|
|
656
|
+
fields: orgRead.fields,
|
|
657
|
+
full: orgRead.full,
|
|
658
|
+
scopes: orgRead.scopes,
|
|
659
|
+
}, examples: ["mg-axi entra organization show --id <organization-id> --profile soc", "mg-axi entra organization show --id <organization-id> --profile soc --full"] },
|
|
660
|
+
{ path: "entra organization branding show", description: "Show the default sign-in branding metadata (non-Stream text and URLs only); Stream image bytes need a later piece; a 404 may indicate unconfigured branding or a missing or inaccessible organization", operation: "GET:/organization/{organization-id}/branding", flags: {
|
|
661
|
+
...common, organization: { value: "organization-id", required: true, description: "Tenant organization UUID whose default branding is shown" },
|
|
662
|
+
select: brandingRead.select,
|
|
663
|
+
fields: brandingRead.fields,
|
|
664
|
+
full: brandingRead.full,
|
|
665
|
+
scopes: brandingRead.scopes,
|
|
666
|
+
}, examples: ["mg-axi entra organization branding show --organization <organization-id> --profile soc", "mg-axi entra organization branding show --organization <organization-id> --profile soc --select id,signInPageText,usernameHintText"] },
|
|
667
|
+
{ path: "entra organization branding-localization list", description: "List locale branding variants with compact properties (id, signInPageText, usernameHintText, backgroundColor); --filter is unsupported (Graph documents $select only)", operation: "GET:/organization/{organization-id}/branding/localizations", flags: {
|
|
668
|
+
...common, organization: { value: "organization-id", required: true, description: "Tenant organization UUID whose locale branding is listed" },
|
|
669
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
670
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
671
|
+
select: brandingRead.select,
|
|
672
|
+
fields: brandingRead.fields,
|
|
673
|
+
full: brandingRead.full,
|
|
674
|
+
cursor: brandingRead.cursor,
|
|
675
|
+
scopes: brandingRead.scopes,
|
|
676
|
+
}, examples: ["mg-axi entra organization branding-localization list --organization <organization-id> --profile soc"] },
|
|
677
|
+
{ path: "entra organization branding-localization show", description: "Show one locale branding variant with the full reviewed non-Stream property set; Stream image bytes need a later piece", operation: "GET:/organization/{organization-id}/branding/localizations/{organizationalBrandingLocalization-id}", flags: {
|
|
678
|
+
...common, organization: { value: "organization-id", required: true, description: "Tenant organization UUID owning the locale branding" },
|
|
679
|
+
id: { value: "locale-id", required: true, description: "Branding locale id, for example fr-FR" },
|
|
680
|
+
select: brandingRead.select,
|
|
681
|
+
fields: brandingRead.fields,
|
|
682
|
+
full: brandingRead.full,
|
|
683
|
+
scopes: brandingRead.scopes,
|
|
684
|
+
}, examples: ["mg-axi entra organization branding-localization show --organization <organization-id> --id fr-FR --profile soc"] },
|
|
685
|
+
{ path: "entra domain list", description: "List tenant domains with compact properties (id, authenticationType, isVerified, isDefault). Domain ids are fully qualified names; --filter is unsupported on /domains (Graph known issue with $search, $top and $filter)", operation: "GET:/domains", flags: {
|
|
686
|
+
...common,
|
|
687
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
688
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
689
|
+
select: domainRead.select,
|
|
690
|
+
fields: domainRead.fields,
|
|
691
|
+
full: domainRead.full,
|
|
692
|
+
cursor: domainRead.cursor,
|
|
693
|
+
scopes: domainRead.scopes,
|
|
694
|
+
}, examples: ["mg-axi entra domain list --profile soc", "mg-axi entra domain list --profile soc --limit 10", "mg-axi entra domain list --profile soc --select id,isVerified,supportedServices"] },
|
|
695
|
+
{ path: "entra domain show", description: "Show one domain with the full reviewed property set; unverified domains point at their verification DNS records", operation: "GET:/domains/{domain-id}", flags: {
|
|
696
|
+
...common, id: { value: "domain-name", required: true, description: "Fully qualified domain name, for example contoso.com; the domain id is the FQDN" },
|
|
697
|
+
select: domainRead.select,
|
|
698
|
+
fields: domainRead.fields,
|
|
699
|
+
full: domainRead.full,
|
|
700
|
+
scopes: domainRead.scopes,
|
|
701
|
+
}, examples: ["mg-axi entra domain show --id contoso.com --profile soc", "mg-axi entra domain show --id contoso.com --profile soc --full"] },
|
|
702
|
+
{ path: "entra domain verification-dns-record list", description: "List the DNS records one domain needs for ownership verification; rows carry @odata.type naming the derived record kind", operation: "GET:/domains/{domain-id}/verificationDnsRecords", flags: {
|
|
703
|
+
...common, domain: { value: "domain-name", required: true, description: "Fully qualified domain name whose verification records are listed" },
|
|
704
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
705
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
706
|
+
filter: dnsRead.filter,
|
|
707
|
+
select: dnsRead.select,
|
|
708
|
+
fields: dnsRead.fields,
|
|
709
|
+
full: dnsRead.full,
|
|
710
|
+
cursor: dnsRead.cursor,
|
|
711
|
+
scopes: dnsRead.scopes,
|
|
712
|
+
}, examples: ["mg-axi entra domain verification-dns-record list --domain contoso.com --profile soc"] },
|
|
713
|
+
{ path: "entra domain verification-dns-record show", description: "Show one domain verification DNS record; rows carry @odata.type naming the derived record kind", operation: "GET:/domains/{domain-id}/verificationDnsRecords/{domainDnsRecord-id}", flags: {
|
|
714
|
+
...common, domain: { value: "domain-name", required: true, description: "Fully qualified domain name owning the record" },
|
|
715
|
+
id: { value: "record-id", required: true, description: "DNS record object ID" },
|
|
716
|
+
select: dnsRead.select,
|
|
717
|
+
fields: dnsRead.fields,
|
|
718
|
+
full: dnsRead.full,
|
|
719
|
+
scopes: dnsRead.scopes,
|
|
720
|
+
}, examples: ["mg-axi entra domain verification-dns-record show --domain contoso.com --id <record-id> --profile soc"] },
|
|
721
|
+
{ path: "entra domain service-configuration-record list", description: "List the DNS records one domain needs to enable services; rows carry @odata.type naming the derived record kind", operation: "GET:/domains/{domain-id}/serviceConfigurationRecords", flags: {
|
|
722
|
+
...common, domain: { value: "domain-name", required: true, description: "Fully qualified domain name whose service records are listed" },
|
|
723
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
724
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
725
|
+
filter: dnsRead.filter,
|
|
726
|
+
select: dnsRead.select,
|
|
727
|
+
fields: dnsRead.fields,
|
|
728
|
+
full: dnsRead.full,
|
|
729
|
+
cursor: dnsRead.cursor,
|
|
730
|
+
scopes: dnsRead.scopes,
|
|
731
|
+
}, examples: ["mg-axi entra domain service-configuration-record list --domain contoso.com --profile soc"] },
|
|
732
|
+
{ path: "entra domain service-configuration-record show", description: "Show one domain service-configuration DNS record; rows carry @odata.type naming the derived record kind", operation: "GET:/domains/{domain-id}/serviceConfigurationRecords/{domainDnsRecord-id}", flags: {
|
|
733
|
+
...common, domain: { value: "domain-name", required: true, description: "Fully qualified domain name owning the record" },
|
|
734
|
+
id: { value: "record-id", required: true, description: "DNS record object ID" },
|
|
735
|
+
select: dnsRead.select,
|
|
736
|
+
fields: dnsRead.fields,
|
|
737
|
+
full: dnsRead.full,
|
|
738
|
+
scopes: dnsRead.scopes,
|
|
739
|
+
}, examples: ["mg-axi entra domain service-configuration-record show --domain contoso.com --id <record-id> --profile soc"] },
|
|
740
|
+
{ path: "entra domain-dns-record list", description: "List domain DNS records from the top-level record set; rows carry @odata.type naming the derived record kind", operation: "GET:/domainDnsRecords", flags: {
|
|
741
|
+
...common,
|
|
742
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
743
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
744
|
+
filter: dnsRead.filter,
|
|
745
|
+
select: dnsRead.select,
|
|
746
|
+
fields: dnsRead.fields,
|
|
747
|
+
full: dnsRead.full,
|
|
748
|
+
cursor: dnsRead.cursor,
|
|
749
|
+
scopes: dnsRead.scopes,
|
|
750
|
+
}, examples: ["mg-axi entra domain-dns-record list --profile soc", "mg-axi entra domain-dns-record list --profile soc --limit 10"] },
|
|
751
|
+
{ path: "entra domain-dns-record show", description: "Show one domain DNS record from the top-level record set; rows carry @odata.type naming the derived record kind", operation: "GET:/domainDnsRecords/{domainDnsRecord-id}", flags: {
|
|
752
|
+
...common, id: { value: "record-id", required: true, description: "DNS record object ID" },
|
|
753
|
+
select: dnsRead.select,
|
|
754
|
+
fields: dnsRead.fields,
|
|
755
|
+
full: dnsRead.full,
|
|
756
|
+
scopes: dnsRead.scopes,
|
|
757
|
+
}, examples: ["mg-axi entra domain-dns-record show --id <record-id> --profile soc"] },
|
|
758
|
+
{ path: "entra certificate-auth-pki list", description: "List certificate-based-auth PKI configurations with compact properties (id, displayName, status); an empty list may mean certificate-based authentication is not configured; --filter passes through as plain $filter", operation: "GET:/directory/publicKeyInfrastructure/certificateBasedAuthConfigurations", flags: {
|
|
759
|
+
...common,
|
|
760
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
761
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
762
|
+
filter: certAuthRead.filter,
|
|
763
|
+
select: certAuthRead.select,
|
|
764
|
+
fields: certAuthRead.fields,
|
|
765
|
+
full: certAuthRead.full,
|
|
766
|
+
cursor: certAuthRead.cursor,
|
|
767
|
+
scopes: certAuthRead.scopes,
|
|
768
|
+
}, examples: ["mg-axi entra certificate-auth-pki list --profile soc", "mg-axi entra certificate-auth-pki list --profile soc --limit 10", "mg-axi entra certificate-auth-pki list --profile soc --filter \"displayName eq 'Contoso PKI'\""] },
|
|
769
|
+
{ path: "entra certificate-auth-pki show", description: "Show one certificate-based-auth PKI configuration with the full reviewed property set", operation: "GET:/directory/publicKeyInfrastructure/certificateBasedAuthConfigurations/{certificateBasedAuthPki-id}", flags: {
|
|
770
|
+
...common, id: { value: "pki-id", required: true, description: "Certificate-auth PKI object ID" },
|
|
771
|
+
select: certAuthRead.select,
|
|
772
|
+
fields: certAuthRead.fields,
|
|
773
|
+
full: certAuthRead.full,
|
|
774
|
+
scopes: certAuthRead.scopes,
|
|
775
|
+
}, examples: ["mg-axi entra certificate-auth-pki show --id <pki-id> --profile soc", "mg-axi entra certificate-auth-pki show --id <pki-id> --profile soc --full"] },
|
|
776
|
+
{ path: "entra certificate-auth-pki count", description: "Count certificate-based-auth PKI configurations as a scalar number; --filter narrows the count server-side", operation: "GET:/directory/publicKeyInfrastructure/certificateBasedAuthConfigurations/$count", flags: {
|
|
777
|
+
...common,
|
|
778
|
+
filter: certAuthRead.filter,
|
|
779
|
+
scopes: certAuthRead.scopes,
|
|
780
|
+
}, examples: ["mg-axi entra certificate-auth-pki count --profile soc", "mg-axi entra certificate-auth-pki count --profile soc --filter \"displayName eq 'Contoso PKI'\""] },
|
|
781
|
+
{ path: "entra certificate-authority list", description: "List the certificate authorities of one PKI configuration with compact properties (id, displayName, certificateAuthorityType, expirationDateTime); public-certificate blobs are omitted by default; --filter passes through as plain $filter", operation: "GET:/directory/publicKeyInfrastructure/certificateBasedAuthConfigurations/{certificateBasedAuthPki-id}/certificateAuthorities", flags: {
|
|
782
|
+
...common,
|
|
783
|
+
pki: { value: "pki-id", required: true, description: "Certificate-auth PKI object ID owning the authorities" },
|
|
784
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
785
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
786
|
+
filter: certAuthorityRead.filter,
|
|
787
|
+
select: certAuthorityRead.select,
|
|
788
|
+
fields: certAuthorityRead.fields,
|
|
789
|
+
full: certAuthorityRead.full,
|
|
790
|
+
cursor: certAuthorityRead.cursor,
|
|
791
|
+
scopes: certAuthorityRead.scopes,
|
|
792
|
+
}, examples: ["mg-axi entra certificate-authority list --pki <pki-id> --profile soc", "mg-axi entra certificate-authority list --pki <pki-id> --profile soc --limit 10"] },
|
|
793
|
+
{ path: "entra certificate-authority show", description: "Show one certificate authority with the reviewed property set; the public-certificate blob (certificate) needs an explicit --select naming it", operation: "GET:/directory/publicKeyInfrastructure/certificateBasedAuthConfigurations/{certificateBasedAuthPki-id}/certificateAuthorities/{certificateAuthorityDetail-id}", flags: {
|
|
794
|
+
...common,
|
|
795
|
+
pki: { value: "pki-id", required: true, description: "Certificate-auth PKI object ID owning the authority" },
|
|
796
|
+
id: { value: "authority-id", required: true, description: "Certificate-authority object ID" },
|
|
797
|
+
select: certAuthorityRead.select,
|
|
798
|
+
fields: certAuthorityRead.fields,
|
|
799
|
+
full: certAuthorityRead.full,
|
|
800
|
+
scopes: certAuthorityRead.scopes,
|
|
801
|
+
}, examples: ["mg-axi entra certificate-authority show --pki <pki-id> --id <authority-id> --profile soc", "mg-axi entra certificate-authority show --pki <pki-id> --id <authority-id> --profile soc --select id,displayName,certificate"] },
|
|
802
|
+
{ path: "entra certificate-authority count", description: "Count the certificate authorities of one PKI configuration as a scalar number; --filter narrows the count server-side", operation: "GET:/directory/publicKeyInfrastructure/certificateBasedAuthConfigurations/{certificateBasedAuthPki-id}/certificateAuthorities/$count", flags: {
|
|
803
|
+
...common,
|
|
804
|
+
pki: { value: "pki-id", required: true, description: "Certificate-auth PKI object ID owning the authorities" },
|
|
805
|
+
filter: certAuthorityRead.filter,
|
|
806
|
+
scopes: certAuthorityRead.scopes,
|
|
807
|
+
}, examples: ["mg-axi entra certificate-authority count --pki <pki-id> --profile soc"] },
|
|
808
|
+
{ path: "entra subscription list", description: "List commercial subscriptions with compact properties (id, skuPartNumber, status, totalLicenses); --filter passes through as plain $filter", operation: "GET:/directory/subscriptions", flags: {
|
|
809
|
+
...common,
|
|
810
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
811
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
812
|
+
filter: subscriptionRead.filter,
|
|
813
|
+
select: subscriptionRead.select,
|
|
814
|
+
fields: subscriptionRead.fields,
|
|
815
|
+
full: subscriptionRead.full,
|
|
816
|
+
cursor: subscriptionRead.cursor,
|
|
817
|
+
scopes: subscriptionRead.scopes,
|
|
818
|
+
}, examples: ["mg-axi entra subscription list --profile soc", "mg-axi entra subscription list --profile soc --limit 10", "mg-axi entra subscription list --profile soc --filter \"status eq 'Enabled'\""] },
|
|
819
|
+
{ path: "entra subscription show", description: "Show one commercial subscription with the full reviewed property set, by object ID or commerce subscription ID", operation: "GET:/directory/subscriptions/{companySubscription-id}", flags: {
|
|
820
|
+
...common,
|
|
821
|
+
id: { value: "subscription-id", description: "Commercial-subscription object ID; exactly one of --id or --commerce-subscription-id" },
|
|
822
|
+
"commerce-subscription-id": { value: "commerce-subscription-id", description: "Commerce-system subscription ID; exactly one of --id or --commerce-subscription-id" },
|
|
823
|
+
select: subscriptionRead.select,
|
|
824
|
+
fields: subscriptionRead.fields,
|
|
825
|
+
full: subscriptionRead.full,
|
|
826
|
+
scopes: subscriptionRead.scopes,
|
|
827
|
+
}, examples: ["mg-axi entra subscription show --id <subscription-id> --profile soc", "mg-axi entra subscription show --id <subscription-id> --profile soc --full", "mg-axi entra subscription show --commerce-subscription-id <commerce-subscription-id> --profile soc"] },
|
|
828
|
+
{ path: "entra subscription count", description: "Count commercial subscriptions as a scalar number; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/directory/subscriptions/$count", flags: {
|
|
829
|
+
...common,
|
|
830
|
+
scopes: subscriptionRead.scopes,
|
|
831
|
+
}, examples: ["mg-axi entra subscription count --profile soc"] },
|
|
832
|
+
{ path: "entra on-premises-synchronization list", description: "List on-premises directory synchronization configurations with the reviewed property set (id, configuration, features); Graph documents $select only, so no --filter", operation: "GET:/directory/onPremisesSynchronization", flags: {
|
|
833
|
+
...common,
|
|
834
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
835
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
836
|
+
select: onPremSyncRead.select,
|
|
837
|
+
fields: onPremSyncRead.fields,
|
|
838
|
+
full: onPremSyncRead.full,
|
|
839
|
+
cursor: onPremSyncRead.cursor,
|
|
840
|
+
scopes: onPremSyncRead.scopes,
|
|
841
|
+
}, examples: ["mg-axi entra on-premises-synchronization list --profile soc", "mg-axi entra on-premises-synchronization list --profile soc --limit 10"] },
|
|
842
|
+
{ path: "entra on-premises-synchronization show", description: "Show one on-premises directory synchronization configuration with the reviewed property set", operation: "GET:/directory/onPremisesSynchronization/{onPremisesDirectorySynchronization-id}", flags: {
|
|
843
|
+
...common, id: { value: "synchronization-id", required: true, description: "On-premises-synchronization object ID (the Entra tenant ID)" },
|
|
844
|
+
select: onPremSyncRead.select,
|
|
845
|
+
fields: onPremSyncRead.fields,
|
|
846
|
+
full: onPremSyncRead.full,
|
|
847
|
+
scopes: onPremSyncRead.scopes,
|
|
848
|
+
}, examples: ["mg-axi entra on-premises-synchronization show --id <synchronization-id> --profile soc", "mg-axi entra on-premises-synchronization show --id <synchronization-id> --profile soc --full"] },
|
|
849
|
+
{ path: "entra agreement list", description: "List terms-of-use agreements with compact properties (id, displayName); --filter passes through as plain $filter (eq)", operation: "GET:/agreements", flags: {
|
|
850
|
+
...common,
|
|
851
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
852
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
853
|
+
filter: agreementRead.filter,
|
|
854
|
+
select: agreementRead.select,
|
|
855
|
+
fields: agreementRead.fields,
|
|
856
|
+
full: agreementRead.full,
|
|
857
|
+
cursor: agreementRead.cursor,
|
|
858
|
+
scopes: agreementRead.scopes,
|
|
859
|
+
}, examples: ["mg-axi entra agreement list --profile soc", "mg-axi entra agreement list --profile soc --limit 10"] },
|
|
860
|
+
{ path: "entra agreement show", description: "Show one terms-of-use agreement with the full reviewed metadata set; file contents are never downloaded or printed", operation: "GET:/agreements/{agreement-id}", flags: {
|
|
861
|
+
...common, id: { value: "agreement-id", required: true, description: "Agreement identifier" },
|
|
862
|
+
select: agreementRead.select,
|
|
863
|
+
fields: agreementRead.fields,
|
|
864
|
+
full: agreementRead.full,
|
|
865
|
+
scopes: agreementRead.scopes,
|
|
866
|
+
}, examples: ["mg-axi entra agreement show --id <agreement-id> --profile soc", "mg-axi entra agreement show --id <agreement-id> --profile soc --full"] },
|
|
867
|
+
{ path: "entra agreement acceptance list", description: "List one agreement's acceptance records with minimal personal-data rows (id, agreementId, state, recordedDateTime); --filter passes through as plain $filter", operation: "GET:/agreements/{agreement-id}/acceptances", flags: {
|
|
868
|
+
...common, agreement: { value: "agreement-id", required: true, description: "Agreement whose acceptance records are listed" },
|
|
869
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
870
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
871
|
+
filter: acceptanceRead.filter,
|
|
872
|
+
select: acceptanceRead.select,
|
|
873
|
+
fields: acceptanceRead.fields,
|
|
874
|
+
full: acceptanceRead.full,
|
|
875
|
+
cursor: acceptanceRead.cursor,
|
|
876
|
+
scopes: acceptanceRead.scopes,
|
|
877
|
+
}, examples: ["mg-axi entra agreement acceptance list --agreement <agreement-id> --profile soc", "mg-axi entra agreement acceptance list --agreement <agreement-id> --profile soc --limit 10"] },
|
|
878
|
+
{ path: "entra agreement acceptance show", description: "Show one agreement's acceptance record with minimal personal-data rows; identifying fields need an explicit --select", operation: "GET:/agreements/{agreement-id}/acceptances/{agreementAcceptance-id}", flags: {
|
|
879
|
+
...common, agreement: { value: "agreement-id", required: true, description: "Agreement owning the acceptance record" },
|
|
880
|
+
id: { value: "acceptance-id", required: true, description: "Agreement-acceptance identifier" },
|
|
881
|
+
select: acceptanceRead.select,
|
|
882
|
+
fields: acceptanceRead.fields,
|
|
883
|
+
full: acceptanceRead.full,
|
|
884
|
+
scopes: acceptanceRead.scopes,
|
|
885
|
+
}, examples: ["mg-axi entra agreement acceptance show --agreement <agreement-id> --id <acceptance-id> --profile soc"] },
|
|
886
|
+
{ path: "entra agreement-acceptance list", description: "List tenant-wide terms-of-use acceptance records with minimal personal-data rows (id, agreementId, state, recordedDateTime); --filter passes through as plain $filter", operation: "GET:/agreementAcceptances", flags: {
|
|
887
|
+
...common,
|
|
888
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
889
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
890
|
+
filter: acceptanceRead.filter,
|
|
891
|
+
select: acceptanceRead.select,
|
|
892
|
+
fields: acceptanceRead.fields,
|
|
893
|
+
full: acceptanceRead.full,
|
|
894
|
+
cursor: acceptanceRead.cursor,
|
|
895
|
+
scopes: acceptanceRead.scopes,
|
|
896
|
+
}, examples: ["mg-axi entra agreement-acceptance list --profile soc", "mg-axi entra agreement-acceptance list --profile soc --limit 10"] },
|
|
897
|
+
{ path: "entra agreement-acceptance show", description: "Show one tenant-wide terms-of-use acceptance record with minimal personal-data rows; identifying fields need an explicit --select", operation: "GET:/agreementAcceptances/{agreementAcceptance-id}", flags: {
|
|
898
|
+
...common, id: { value: "acceptance-id", required: true, description: "Agreement-acceptance identifier" },
|
|
899
|
+
select: acceptanceRead.select,
|
|
900
|
+
fields: acceptanceRead.fields,
|
|
901
|
+
full: acceptanceRead.full,
|
|
902
|
+
scopes: acceptanceRead.scopes,
|
|
903
|
+
}, examples: ["mg-axi entra agreement-acceptance show --id <acceptance-id> --profile soc"] },
|
|
904
|
+
{ path: "entra directory-object list", description: "List directory objects with compact rows (id plus the @odata.type subtype discriminator); Graph documents no List operation page, so no --filter", operation: "GET:/directoryObjects", flags: {
|
|
905
|
+
...common,
|
|
906
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
907
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
908
|
+
select: directoryObjectRead.select,
|
|
909
|
+
fields: directoryObjectRead.fields,
|
|
910
|
+
full: directoryObjectRead.full,
|
|
911
|
+
cursor: directoryObjectRead.cursor,
|
|
912
|
+
scopes: directoryObjectRead.scopes,
|
|
913
|
+
}, examples: ["mg-axi entra directory-object list --profile soc", "mg-axi entra directory-object list --profile soc --limit 10"] },
|
|
914
|
+
{ path: "entra directory-object show", description: "Show one directory object with the reviewed base properties (id, deletedDateTime) plus the @odata.type subtype discriminator; subtype detail needs the subtype's named reads", operation: "GET:/directoryObjects/{directoryObject-id}", flags: {
|
|
915
|
+
...common, id: { value: "object-id", required: true, description: "Directory-object object ID" },
|
|
916
|
+
select: directoryObjectRead.select,
|
|
917
|
+
fields: directoryObjectRead.fields,
|
|
918
|
+
full: directoryObjectRead.full,
|
|
919
|
+
scopes: directoryObjectRead.scopes,
|
|
920
|
+
}, examples: ["mg-axi entra directory-object show --id <object-id> --profile soc", "mg-axi entra directory-object show --id <object-id> --profile soc --full"] },
|
|
921
|
+
{ path: "entra directory-object count", description: "Count directory objects as one scalar; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/directoryObjects/$count", flags: {
|
|
922
|
+
...common,
|
|
923
|
+
scopes: directoryObjectRead.scopes,
|
|
924
|
+
}, examples: ["mg-axi entra directory-object count --profile soc"] },
|
|
925
|
+
{ path: "entra contact list", description: "List organizational contacts with minimal personal-data rows (id, displayName, mail, companyName); --filter passes through as plain $filter with ConsistencyLevel eventual", operation: "GET:/contacts", flags: {
|
|
926
|
+
...common,
|
|
927
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
928
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
929
|
+
filter: contactRead.filter,
|
|
930
|
+
select: contactRead.select,
|
|
931
|
+
fields: contactRead.fields,
|
|
932
|
+
full: contactRead.full,
|
|
933
|
+
cursor: contactRead.cursor,
|
|
934
|
+
scopes: contactRead.scopes,
|
|
935
|
+
}, examples: ["mg-axi entra contact list --profile soc", "mg-axi entra contact list --profile soc --limit 10"] },
|
|
936
|
+
{ path: "entra contact show", description: "Show one organizational contact with minimal personal-data rows (id, displayName, mail, companyName); identifying fields need an explicit --select", operation: "GET:/contacts/{orgContact-id}", flags: {
|
|
937
|
+
...common, id: { value: "contact-id", required: true, description: "Organizational-contact object ID" },
|
|
938
|
+
select: contactRead.select,
|
|
939
|
+
fields: contactRead.fields,
|
|
940
|
+
full: contactRead.full,
|
|
941
|
+
scopes: contactRead.scopes,
|
|
942
|
+
}, examples: ["mg-axi entra contact show --id <contact-id> --profile soc", "mg-axi entra contact show --id <contact-id> --profile soc --full"] },
|
|
943
|
+
{ path: "entra contact count", description: "Count organizational contacts as one scalar; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/contacts/$count", flags: {
|
|
944
|
+
...common,
|
|
945
|
+
scopes: contactRead.scopes,
|
|
946
|
+
}, examples: ["mg-axi entra contact count --profile soc"] },
|
|
947
|
+
{ path: "entra contact show-manager", description: "Show one contact's manager as a directory object with type plus minimal rows (id, displayName); mail needs an explicit --select", operation: "GET:/contacts/{orgContact-id}/manager", flags: {
|
|
948
|
+
...common, id: { value: "contact-id", required: true, description: "Organizational-contact object ID" },
|
|
949
|
+
select: contactNavRead.select,
|
|
950
|
+
fields: contactNavRead.fields,
|
|
951
|
+
full: contactNavRead.full,
|
|
952
|
+
scopes: contactNavRead.scopes,
|
|
953
|
+
}, examples: ["mg-axi entra contact show-manager --id <contact-id> --profile soc"] },
|
|
954
|
+
{ path: "entra contact list-direct-reports", description: "List one contact's direct reports as directory objects with type plus minimal rows (id, displayName); --as selects the user or contact cast route", operation: "GET:/contacts/{orgContact-id}/directReports", flags: {
|
|
955
|
+
...common, id: { value: "contact-id", required: true, description: "Organizational-contact object ID" },
|
|
956
|
+
as: contactNavRead.as,
|
|
957
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
958
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
959
|
+
select: contactNavRead.select,
|
|
960
|
+
fields: contactNavRead.fields,
|
|
961
|
+
full: contactNavRead.full,
|
|
962
|
+
cursor: contactNavRead.cursor,
|
|
963
|
+
scopes: contactNavRead.scopes,
|
|
964
|
+
}, examples: ["mg-axi entra contact list-direct-reports --id <contact-id> --profile soc", "mg-axi entra contact list-direct-reports --id <contact-id> --as user --profile soc"] },
|
|
965
|
+
{ path: "entra contact show-direct-report", description: "Show one direct report as a directory object with type plus minimal rows (id, displayName); --as selects the user or contact cast route", operation: "GET:/contacts/{orgContact-id}/directReports/{directoryObject-id}", flags: {
|
|
966
|
+
...common, id: { value: "contact-id", required: true, description: "Organizational-contact object ID" },
|
|
967
|
+
"report-id": { value: "report-id", required: true, description: "Direct-report directory-object ID" },
|
|
968
|
+
as: contactNavRead.as,
|
|
969
|
+
select: contactNavRead.select,
|
|
970
|
+
fields: contactNavRead.fields,
|
|
971
|
+
full: contactNavRead.full,
|
|
972
|
+
scopes: contactNavRead.scopes,
|
|
973
|
+
}, examples: ["mg-axi entra contact show-direct-report --id <contact-id> --report-id <report-id> --profile soc"] },
|
|
974
|
+
{ path: "entra contact count-direct-reports", description: "Count one contact's direct reports as one scalar; the $count route takes no --select, --limit or --cursor; --as selects the user or contact cast route", operation: "GET:/contacts/{orgContact-id}/directReports/$count", flags: {
|
|
975
|
+
...common, id: { value: "contact-id", required: true, description: "Organizational-contact object ID" },
|
|
976
|
+
as: contactNavRead.as,
|
|
977
|
+
scopes: contactNavRead.scopes,
|
|
978
|
+
}, examples: ["mg-axi entra contact count-direct-reports --id <contact-id> --profile soc"] },
|
|
979
|
+
{ path: "entra contact list-member-of", description: "List groups and administrative units one contact belongs to as directory objects with type plus minimal rows (id, displayName); --transitive flattens nested membership; --as selects the group or administrativeUnit cast route", operation: "GET:/contacts/{orgContact-id}/memberOf", flags: {
|
|
980
|
+
...common, id: { value: "contact-id", required: true, description: "Organizational-contact object ID" },
|
|
981
|
+
transitive: contactMembershipRead.transitive,
|
|
982
|
+
as: contactMembershipRead.as,
|
|
983
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
984
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
985
|
+
filter: contactMembershipRead.filter,
|
|
986
|
+
select: contactMembershipRead.select,
|
|
987
|
+
fields: contactMembershipRead.fields,
|
|
988
|
+
full: contactMembershipRead.full,
|
|
989
|
+
cursor: contactMembershipRead.cursor,
|
|
990
|
+
scopes: contactMembershipRead.scopes,
|
|
991
|
+
}, examples: ["mg-axi entra contact list-member-of --id <contact-id> --profile soc", "mg-axi entra contact list-member-of --id <contact-id> --transitive --profile soc"] },
|
|
992
|
+
{ path: "entra contact show-member-of", description: "Show one membership as a directory object with type plus minimal rows (id, displayName); --transitive reads the transitive closure; --as selects the group or administrativeUnit cast route", operation: "GET:/contacts/{orgContact-id}/memberOf/{directoryObject-id}", flags: {
|
|
993
|
+
...common, id: { value: "contact-id", required: true, description: "Organizational-contact object ID" },
|
|
994
|
+
"member-id": { value: "membership-id", required: true, description: "Membership directory-object ID" },
|
|
995
|
+
transitive: contactMembershipRead.transitive,
|
|
996
|
+
as: contactMembershipRead.as,
|
|
997
|
+
select: contactMembershipRead.select,
|
|
998
|
+
fields: contactMembershipRead.fields,
|
|
999
|
+
full: contactMembershipRead.full,
|
|
1000
|
+
scopes: contactMembershipRead.scopes,
|
|
1001
|
+
}, examples: ["mg-axi entra contact show-member-of --id <contact-id> --member-id <membership-id> --profile soc"] },
|
|
1002
|
+
{ path: "entra contact count-member-of", description: "Count one contact's memberships as one scalar; the $count route takes no --select, --limit or --cursor; --transitive counts the transitive closure; --as selects the group or administrativeUnit cast route", operation: "GET:/contacts/{orgContact-id}/memberOf/$count", flags: {
|
|
1003
|
+
...common, id: { value: "contact-id", required: true, description: "Organizational-contact object ID" },
|
|
1004
|
+
transitive: contactMembershipRead.transitive,
|
|
1005
|
+
as: contactMembershipRead.as,
|
|
1006
|
+
scopes: contactMembershipRead.scopes,
|
|
1007
|
+
}, examples: ["mg-axi entra contact count-member-of --id <contact-id> --profile soc"] },
|
|
1008
|
+
{ path: "entra group-lifecycle-policy list", description: "List group lifecycle (expiry) policies with compact properties (id, groupLifetimeInDays, managedGroupTypes); --filter passes through as plain $filter", operation: "GET:/groupLifecyclePolicies", flags: {
|
|
1009
|
+
...common,
|
|
1010
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1011
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1012
|
+
filter: lifecycleRead.filter,
|
|
1013
|
+
select: lifecycleRead.select,
|
|
1014
|
+
fields: lifecycleRead.fields,
|
|
1015
|
+
full: lifecycleRead.full,
|
|
1016
|
+
cursor: lifecycleRead.cursor,
|
|
1017
|
+
scopes: lifecycleRead.scopes,
|
|
1018
|
+
}, examples: ["mg-axi entra group-lifecycle-policy list --profile soc", "mg-axi entra group-lifecycle-policy list --profile soc --limit 10"] },
|
|
1019
|
+
{ path: "entra group-lifecycle-policy show", description: "Show one group lifecycle policy with the full reviewed property set (id, alternateNotificationEmails, groupLifetimeInDays, managedGroupTypes)", operation: "GET:/groupLifecyclePolicies/{groupLifecyclePolicy-id}", flags: {
|
|
1020
|
+
...common, id: { value: "policy-id", required: true, description: "Lifecycle policy identifier" },
|
|
1021
|
+
select: lifecycleRead.select,
|
|
1022
|
+
fields: lifecycleRead.fields,
|
|
1023
|
+
full: lifecycleRead.full,
|
|
1024
|
+
scopes: lifecycleRead.scopes,
|
|
1025
|
+
}, examples: ["mg-axi entra group-lifecycle-policy show --id <policy-id> --profile soc", "mg-axi entra group-lifecycle-policy show --id <policy-id> --profile soc --full"] },
|
|
1026
|
+
{ path: "entra group-lifecycle-policy count", description: "Count group lifecycle policies as one scalar; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/groupLifecyclePolicies/$count", flags: {
|
|
1027
|
+
...common,
|
|
1028
|
+
scopes: lifecycleRead.scopes,
|
|
1029
|
+
}, examples: ["mg-axi entra group-lifecycle-policy count --profile soc"] },
|
|
1030
|
+
{ path: "entra group-setting-template list", description: "List group setting templates with compact properties (id, displayName, description); --filter is unsupported on /groupSettingTemplates (Graph documents $select only)", operation: "GET:/groupSettingTemplates", flags: {
|
|
1031
|
+
...common,
|
|
1032
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1033
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1034
|
+
select: templateRead.select,
|
|
1035
|
+
fields: templateRead.fields,
|
|
1036
|
+
full: templateRead.full,
|
|
1037
|
+
cursor: templateRead.cursor,
|
|
1038
|
+
scopes: templateRead.scopes,
|
|
1039
|
+
}, examples: ["mg-axi entra group-setting-template list --profile soc", "mg-axi entra group-setting-template list --profile soc --limit 10"] },
|
|
1040
|
+
{ path: "entra group-setting-template show", description: "Show one group setting template with the full reviewed property set including the values collection of setting names, types and defaults", operation: "GET:/groupSettingTemplates/{groupSettingTemplate-id}", flags: {
|
|
1041
|
+
...common, id: { value: "template-id", required: true, description: "Setting template identifier" },
|
|
1042
|
+
select: templateRead.select,
|
|
1043
|
+
fields: templateRead.fields,
|
|
1044
|
+
full: templateRead.full,
|
|
1045
|
+
scopes: templateRead.scopes,
|
|
1046
|
+
}, examples: ["mg-axi entra group-setting-template show --id <template-id> --profile soc", "mg-axi entra group-setting-template show --id <template-id> --profile soc --full"] },
|
|
1047
|
+
{ path: "entra group-setting-template count", description: "Count group setting templates as one scalar; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/groupSettingTemplates/$count", flags: {
|
|
1048
|
+
...common,
|
|
1049
|
+
scopes: templateRead.scopes,
|
|
1050
|
+
}, examples: ["mg-axi entra group-setting-template count --profile soc"] },
|
|
1051
|
+
{ path: "entra attribute-set list", description: "List custom-security attribute sets with the reviewed properties (id, description, maxAttributesPerSet); --filter is unsupported on /directory/attributeSets (Graph documents $select, $top and $orderby only)", operation: "GET:/directory/attributeSets", flags: {
|
|
1052
|
+
...common,
|
|
1053
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1054
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1055
|
+
select: attributeSetRead.select,
|
|
1056
|
+
fields: attributeSetRead.fields,
|
|
1057
|
+
full: attributeSetRead.full,
|
|
1058
|
+
cursor: attributeSetRead.cursor,
|
|
1059
|
+
scopes: attributeSetRead.scopes,
|
|
1060
|
+
}, examples: ["mg-axi entra attribute-set list --profile soc", "mg-axi entra attribute-set list --profile soc --limit 10"] },
|
|
1061
|
+
{ path: "entra attribute-set show", description: "Show one custom-security attribute set with the reviewed property set (id, description, maxAttributesPerSet)", operation: "GET:/directory/attributeSets/{attributeSet-id}", flags: {
|
|
1062
|
+
...common, id: { value: "set-id", required: true, description: "Attribute-set identifier" },
|
|
1063
|
+
select: attributeSetRead.select,
|
|
1064
|
+
fields: attributeSetRead.fields,
|
|
1065
|
+
full: attributeSetRead.full,
|
|
1066
|
+
scopes: attributeSetRead.scopes,
|
|
1067
|
+
}, examples: ["mg-axi entra attribute-set show --id <set-id> --profile soc", "mg-axi entra attribute-set show --id <set-id> --profile soc --full"] },
|
|
1068
|
+
{ path: "entra attribute-set count", description: "Count custom-security attribute sets as one scalar; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/directory/attributeSets/$count", flags: {
|
|
1069
|
+
...common,
|
|
1070
|
+
scopes: attributeSetRead.scopes,
|
|
1071
|
+
}, examples: ["mg-axi entra attribute-set count --profile soc"] },
|
|
1072
|
+
{ path: "entra custom-security-attribute-definition list", description: "List custom security attribute definitions with compact properties (id, attributeSet, name, status, type); --filter passes through as plain $filter (eq)", operation: "GET:/directory/customSecurityAttributeDefinitions", flags: {
|
|
1073
|
+
...common,
|
|
1074
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1075
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1076
|
+
filter: customSecurityDefinitionRead.filter,
|
|
1077
|
+
select: customSecurityDefinitionRead.select,
|
|
1078
|
+
fields: customSecurityDefinitionRead.fields,
|
|
1079
|
+
full: customSecurityDefinitionRead.full,
|
|
1080
|
+
cursor: customSecurityDefinitionRead.cursor,
|
|
1081
|
+
scopes: customSecurityDefinitionRead.scopes,
|
|
1082
|
+
}, examples: ["mg-axi entra custom-security-attribute-definition list --profile soc", "mg-axi entra custom-security-attribute-definition list --profile soc --limit 10", "mg-axi entra custom-security-attribute-definition list --profile soc --filter \"status eq 'Available'\""] },
|
|
1083
|
+
{ path: "entra custom-security-attribute-definition show", description: "Show one custom security attribute definition with the full reviewed property set; allowed values have their own list/show commands", operation: "GET:/directory/customSecurityAttributeDefinitions/{customSecurityAttributeDefinition-id}", flags: {
|
|
1084
|
+
...common, id: { value: "definition-id", required: true, description: "Custom-security-attribute-definition identifier (<attributeSet>_<name>)" },
|
|
1085
|
+
select: customSecurityDefinitionRead.select,
|
|
1086
|
+
fields: customSecurityDefinitionRead.fields,
|
|
1087
|
+
full: customSecurityDefinitionRead.full,
|
|
1088
|
+
scopes: customSecurityDefinitionRead.scopes,
|
|
1089
|
+
}, examples: ["mg-axi entra custom-security-attribute-definition show --id <definition-id> --profile soc", "mg-axi entra custom-security-attribute-definition show --id <definition-id> --profile soc --full"] },
|
|
1090
|
+
{ path: "entra custom-security-attribute-definition count", description: "Count custom security attribute definitions as a scalar number; --filter narrows the count server-side", operation: "GET:/directory/customSecurityAttributeDefinitions/$count", flags: {
|
|
1091
|
+
...common,
|
|
1092
|
+
filter: customSecurityDefinitionRead.filter,
|
|
1093
|
+
scopes: customSecurityDefinitionRead.scopes,
|
|
1094
|
+
}, examples: ["mg-axi entra custom-security-attribute-definition count --profile soc", "mg-axi entra custom-security-attribute-definition count --profile soc --filter \"status eq 'Available'\""] },
|
|
1095
|
+
{ path: "entra allowed-value list", description: "List the predefined allowed values of one custom security attribute definition with the reviewed properties (id, isActive); --filter is unsupported on allowedValues (Graph documents $select only)", operation: "GET:/directory/customSecurityAttributeDefinitions/{customSecurityAttributeDefinition-id}/allowedValues", flags: {
|
|
1096
|
+
...common,
|
|
1097
|
+
definition: { value: "definition-id", required: true, description: "Custom-security-attribute-definition identifier owning the allowed values" },
|
|
1098
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1099
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1100
|
+
select: allowedValueRead.select,
|
|
1101
|
+
fields: allowedValueRead.fields,
|
|
1102
|
+
full: allowedValueRead.full,
|
|
1103
|
+
cursor: allowedValueRead.cursor,
|
|
1104
|
+
scopes: allowedValueRead.scopes,
|
|
1105
|
+
}, examples: ["mg-axi entra allowed-value list --definition <definition-id> --profile soc", "mg-axi entra allowed-value list --definition <definition-id> --profile soc --limit 10"] },
|
|
1106
|
+
{ path: "entra allowed-value show", description: "Show one predefined allowed value with the reviewed property set (id, isActive)", operation: "GET:/directory/customSecurityAttributeDefinitions/{customSecurityAttributeDefinition-id}/allowedValues/{allowedValue-id}", flags: {
|
|
1107
|
+
...common,
|
|
1108
|
+
definition: { value: "definition-id", required: true, description: "Custom-security-attribute-definition identifier owning the allowed value" },
|
|
1109
|
+
id: { value: "value-id", required: true, description: "Allowed-value identifier" },
|
|
1110
|
+
select: allowedValueRead.select,
|
|
1111
|
+
fields: allowedValueRead.fields,
|
|
1112
|
+
full: allowedValueRead.full,
|
|
1113
|
+
scopes: allowedValueRead.scopes,
|
|
1114
|
+
}, examples: ["mg-axi entra allowed-value show --definition <definition-id> --id <value-id> --profile soc"] },
|
|
1115
|
+
{ path: "entra allowed-value count", description: "Count the predefined allowed values of one custom security attribute definition as one scalar; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/directory/customSecurityAttributeDefinitions/{customSecurityAttributeDefinition-id}/allowedValues/$count", flags: {
|
|
1116
|
+
...common,
|
|
1117
|
+
definition: { value: "definition-id", required: true, description: "Custom-security-attribute-definition identifier owning the allowed values" },
|
|
1118
|
+
scopes: allowedValueRead.scopes,
|
|
1119
|
+
}, examples: ["mg-axi entra allowed-value count --definition <definition-id> --profile soc"] },
|
|
1120
|
+
{ path: "entra contract list", description: "List partner-tenant customer contracts with compact properties (id, displayName, contractType, defaultDomainName); contracts exist in partner tenants only; --filter passes through as plain $filter", operation: "GET:/contracts", flags: {
|
|
1121
|
+
...common,
|
|
1122
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1123
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1124
|
+
filter: contractRead.filter,
|
|
1125
|
+
select: contractRead.select,
|
|
1126
|
+
fields: contractRead.fields,
|
|
1127
|
+
full: contractRead.full,
|
|
1128
|
+
cursor: contractRead.cursor,
|
|
1129
|
+
scopes: contractRead.scopes,
|
|
1130
|
+
}, examples: ["mg-axi entra contract list --profile soc", "mg-axi entra contract list --profile soc --limit 10", "mg-axi entra contract list --profile soc --filter \"contractType eq 'ResellerPartner'\""] },
|
|
1131
|
+
{ path: "entra contract show", description: "Show one partner contract with the full reviewed property set (contractType, customerId, defaultDomainName, displayName, id)", operation: "GET:/contracts/{contract-id}", flags: {
|
|
1132
|
+
...common, id: { value: "contract-id", required: true, description: "Contract partnership identifier" },
|
|
1133
|
+
select: contractRead.select,
|
|
1134
|
+
fields: contractRead.fields,
|
|
1135
|
+
full: contractRead.full,
|
|
1136
|
+
scopes: contractRead.scopes,
|
|
1137
|
+
}, examples: ["mg-axi entra contract show --id <contract-id> --profile soc", "mg-axi entra contract show --id <contract-id> --profile soc --full"] },
|
|
1138
|
+
{ path: "entra contract count", description: "Count partner-tenant customer contracts as one scalar; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/contracts/$count", flags: {
|
|
1139
|
+
...common,
|
|
1140
|
+
scopes: contractRead.scopes,
|
|
1141
|
+
}, examples: ["mg-axi entra contract count --profile soc"] },
|
|
1142
|
+
{ path: "entra delegated-admin-customer list", description: "List delegated-admin customers of the partner tenant with compact properties (id, displayName, tenantId); delegated-admin reads run in the partner tenant; --filter passes through as plain $filter", operation: "GET:/tenantRelationships/delegatedAdminCustomers", flags: {
|
|
1143
|
+
...common,
|
|
1144
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1145
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1146
|
+
filter: delegatedAdminRead.filter,
|
|
1147
|
+
select: delegatedAdminRead.select,
|
|
1148
|
+
fields: delegatedAdminRead.fields,
|
|
1149
|
+
full: delegatedAdminRead.full,
|
|
1150
|
+
cursor: delegatedAdminRead.cursor,
|
|
1151
|
+
scopes: delegatedAdminRead.scopes,
|
|
1152
|
+
}, examples: ["mg-axi entra delegated-admin-customer list --profile soc", "mg-axi entra delegated-admin-customer list --profile soc --limit 10", "mg-axi entra delegated-admin-customer list --profile soc --filter \"displayName eq 'Contoso'\""] },
|
|
1153
|
+
{ path: "entra delegated-admin-customer show", description: "Show one delegated-admin customer with the full reviewed property set (displayName, id, tenantId)", operation: "GET:/tenantRelationships/delegatedAdminCustomers/{delegatedAdminCustomer-id}", flags: {
|
|
1154
|
+
...common, id: { value: "customer-id", required: true, description: "Delegated-admin customer identifier" },
|
|
1155
|
+
select: delegatedAdminRead.select,
|
|
1156
|
+
fields: delegatedAdminRead.fields,
|
|
1157
|
+
full: delegatedAdminRead.full,
|
|
1158
|
+
scopes: delegatedAdminRead.scopes,
|
|
1159
|
+
}, examples: ["mg-axi entra delegated-admin-customer show --id <customer-id> --profile soc", "mg-axi entra delegated-admin-customer show --id <customer-id> --profile soc --full"] },
|
|
1160
|
+
{ path: "entra delegated-admin-relationship list", description: "List partner-tenant delegated-admin relationships with compact properties (id, displayName, status, customer, endDateTime); --filter passes through as plain $filter", operation: "GET:/tenantRelationships/delegatedAdminRelationships", flags: {
|
|
1161
|
+
...common,
|
|
1162
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1163
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1164
|
+
filter: delegatedAdminRead.filter,
|
|
1165
|
+
select: delegatedAdminRead.select,
|
|
1166
|
+
fields: delegatedAdminRead.fields,
|
|
1167
|
+
full: delegatedAdminRead.full,
|
|
1168
|
+
cursor: delegatedAdminRead.cursor,
|
|
1169
|
+
scopes: delegatedAdminRead.scopes,
|
|
1170
|
+
}, examples: ["mg-axi entra delegated-admin-relationship list --profile soc", "mg-axi entra delegated-admin-relationship list --profile soc --limit 10", "mg-axi entra delegated-admin-relationship list --profile soc --filter \"status eq 'active'\""] },
|
|
1171
|
+
{ path: "entra delegated-admin-relationship show", description: "Show one delegated-admin relationship with the full reviewed property set (accessDetails, activatedDateTime, autoExtendDuration, createdDateTime, customer, displayName, duration, endDateTime, id, lastModifiedDateTime, status)", operation: "GET:/tenantRelationships/delegatedAdminRelationships/{delegatedAdminRelationship-id}", flags: {
|
|
1172
|
+
...common, id: { value: "relationship-id", required: true, description: "Delegated-admin relationship identifier" },
|
|
1173
|
+
select: delegatedAdminRead.select,
|
|
1174
|
+
fields: delegatedAdminRead.fields,
|
|
1175
|
+
full: delegatedAdminRead.full,
|
|
1176
|
+
scopes: delegatedAdminRead.scopes,
|
|
1177
|
+
}, examples: ["mg-axi entra delegated-admin-relationship show --id <relationship-id> --profile soc", "mg-axi entra delegated-admin-relationship show --id <relationship-id> --profile soc --full"] },
|
|
1178
|
+
{ path: "entra delegated-admin-relationship list-access-assignments", description: "List one relationship's delegated-admin access assignments with compact properties (id, status, accessContainer, accessDetails); --filter passes through as plain $filter", operation: "GET:/tenantRelationships/delegatedAdminRelationships/{delegatedAdminRelationship-id}/accessAssignments", flags: {
|
|
1179
|
+
...common, id: { value: "relationship-id", required: true, description: "Delegated-admin relationship identifier" },
|
|
1180
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1181
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1182
|
+
filter: delegatedAdminRead.filter,
|
|
1183
|
+
select: delegatedAdminRead.select,
|
|
1184
|
+
fields: delegatedAdminRead.fields,
|
|
1185
|
+
full: delegatedAdminRead.full,
|
|
1186
|
+
cursor: delegatedAdminRead.cursor,
|
|
1187
|
+
scopes: delegatedAdminRead.scopes,
|
|
1188
|
+
}, examples: ["mg-axi entra delegated-admin-relationship list-access-assignments --id <relationship-id> --profile soc", "mg-axi entra delegated-admin-relationship list-access-assignments --id <relationship-id> --profile soc --limit 10"] },
|
|
1189
|
+
{ path: "entra delegated-admin-relationship show-access-assignment", description: "Show one delegated-admin access assignment with the full reviewed property set (accessContainer, accessDetails, createdDateTime, id, lastModifiedDateTime, status)", operation: "GET:/tenantRelationships/delegatedAdminRelationships/{delegatedAdminRelationship-id}/accessAssignments/{delegatedAdminAccessAssignment-id}", flags: {
|
|
1190
|
+
...common, id: { value: "relationship-id", required: true, description: "Delegated-admin relationship identifier" },
|
|
1191
|
+
"assignment-id": { value: "assignment-id", required: true, description: "Delegated-admin access-assignment identifier" },
|
|
1192
|
+
select: delegatedAdminRead.select,
|
|
1193
|
+
fields: delegatedAdminRead.fields,
|
|
1194
|
+
full: delegatedAdminRead.full,
|
|
1195
|
+
scopes: delegatedAdminRead.scopes,
|
|
1196
|
+
}, examples: ["mg-axi entra delegated-admin-relationship show-access-assignment --id <relationship-id> --assignment-id <assignment-id> --profile soc"] },
|
|
1197
|
+
{ path: "entra delegated-admin-relationship list-operations", description: "List one relationship's long-running delegated-admin operations with compact properties (id, operationType, status, lastModifiedDateTime); --filter passes through as plain $filter", operation: "GET:/tenantRelationships/delegatedAdminRelationships/{delegatedAdminRelationship-id}/operations", flags: {
|
|
1198
|
+
...common, id: { value: "relationship-id", required: true, description: "Delegated-admin relationship identifier" },
|
|
1199
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1200
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1201
|
+
filter: delegatedAdminRead.filter,
|
|
1202
|
+
select: delegatedAdminRead.select,
|
|
1203
|
+
fields: delegatedAdminRead.fields,
|
|
1204
|
+
full: delegatedAdminRead.full,
|
|
1205
|
+
cursor: delegatedAdminRead.cursor,
|
|
1206
|
+
scopes: delegatedAdminRead.scopes,
|
|
1207
|
+
}, examples: ["mg-axi entra delegated-admin-relationship list-operations --id <relationship-id> --profile soc", "mg-axi entra delegated-admin-relationship list-operations --id <relationship-id> --profile soc --filter \"status eq 'succeeded'\""] },
|
|
1208
|
+
{ path: "entra delegated-admin-relationship show-operation", description: "Show one delegated-admin relationship operation with the full reviewed property set (createdDateTime, data, id, lastModifiedDateTime, operationType, status); the data payload is a JSON-encoded string", operation: "GET:/tenantRelationships/delegatedAdminRelationships/{delegatedAdminRelationship-id}/operations/{delegatedAdminRelationshipOperation-id}", flags: {
|
|
1209
|
+
...common, id: { value: "relationship-id", required: true, description: "Delegated-admin relationship identifier" },
|
|
1210
|
+
"operation-id": { value: "operation-id", required: true, description: "Delegated-admin relationship-operation identifier" },
|
|
1211
|
+
select: delegatedAdminRead.select,
|
|
1212
|
+
fields: delegatedAdminRead.fields,
|
|
1213
|
+
full: delegatedAdminRead.full,
|
|
1214
|
+
scopes: delegatedAdminRead.scopes,
|
|
1215
|
+
}, examples: ["mg-axi entra delegated-admin-relationship show-operation --id <relationship-id> --operation-id <operation-id> --profile soc"] },
|
|
1216
|
+
{ path: "entra delegated-admin-relationship list-requests", description: "List one relationship's delegated-admin requests with compact properties (id, action, status, lastModifiedDateTime); --filter passes through as plain $filter", operation: "GET:/tenantRelationships/delegatedAdminRelationships/{delegatedAdminRelationship-id}/requests", flags: {
|
|
1217
|
+
...common, id: { value: "relationship-id", required: true, description: "Delegated-admin relationship identifier" },
|
|
1218
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1219
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1220
|
+
filter: delegatedAdminRead.filter,
|
|
1221
|
+
select: delegatedAdminRead.select,
|
|
1222
|
+
fields: delegatedAdminRead.fields,
|
|
1223
|
+
full: delegatedAdminRead.full,
|
|
1224
|
+
cursor: delegatedAdminRead.cursor,
|
|
1225
|
+
scopes: delegatedAdminRead.scopes,
|
|
1226
|
+
}, examples: ["mg-axi entra delegated-admin-relationship list-requests --id <relationship-id> --profile soc", "mg-axi entra delegated-admin-relationship list-requests --id <relationship-id> --profile soc --limit 10"] },
|
|
1227
|
+
{ path: "entra delegated-admin-relationship show-request", description: "Show one delegated-admin relationship request with the full reviewed property set (action, createdDateTime, id, lastModifiedDateTime, status)", operation: "GET:/tenantRelationships/delegatedAdminRelationships/{delegatedAdminRelationship-id}/requests/{delegatedAdminRelationshipRequest-id}", flags: {
|
|
1228
|
+
...common, id: { value: "relationship-id", required: true, description: "Delegated-admin relationship identifier" },
|
|
1229
|
+
"request-id": { value: "request-id", required: true, description: "Delegated-admin relationship-request identifier" },
|
|
1230
|
+
select: delegatedAdminRead.select,
|
|
1231
|
+
fields: delegatedAdminRead.fields,
|
|
1232
|
+
full: delegatedAdminRead.full,
|
|
1233
|
+
scopes: delegatedAdminRead.scopes,
|
|
1234
|
+
}, examples: ["mg-axi entra delegated-admin-relationship show-request --id <relationship-id> --request-id <request-id> --profile soc"] },
|
|
1235
|
+
{ path: "entra delegated-admin-customer list-service-management-details", description: "List one customer's service-management details (id, serviceName, serviceManagementUrl); Graph documents no query parameters here, so --select and --filter are unsupported and rows project locally", operation: "GET:/tenantRelationships/delegatedAdminCustomers/{delegatedAdminCustomer-id}/serviceManagementDetails", flags: {
|
|
1236
|
+
...common, id: { value: "customer-id", required: true, description: "Delegated-admin customer identifier" },
|
|
1237
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1238
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1239
|
+
fields: delegatedAdminQuerylessRead.fields,
|
|
1240
|
+
full: delegatedAdminQuerylessRead.full,
|
|
1241
|
+
cursor: delegatedAdminQuerylessRead.cursor,
|
|
1242
|
+
scopes: delegatedAdminQuerylessRead.scopes,
|
|
1243
|
+
}, examples: ["mg-axi entra delegated-admin-customer list-service-management-details --id <customer-id> --profile soc"] },
|
|
1244
|
+
{ path: "entra delegated-admin-customer show-service-management-detail", description: "Show one service-management detail with the reviewed property set (id, serviceManagementUrl, serviceName); Graph documents no query parameters here, so --select is unsupported and rows project locally", operation: "GET:/tenantRelationships/delegatedAdminCustomers/{delegatedAdminCustomer-id}/serviceManagementDetails/{delegatedAdminServiceManagementDetail-id}", flags: {
|
|
1245
|
+
...common, id: { value: "customer-id", required: true, description: "Delegated-admin customer identifier" },
|
|
1246
|
+
"detail-id": { value: "detail-id", required: true, description: "Delegated-admin service-management-detail identifier" },
|
|
1247
|
+
fields: delegatedAdminQuerylessRead.fields,
|
|
1248
|
+
full: delegatedAdminQuerylessRead.full,
|
|
1249
|
+
scopes: delegatedAdminQuerylessRead.scopes,
|
|
1250
|
+
}, examples: ["mg-axi entra delegated-admin-customer show-service-management-detail --id <customer-id> --detail-id <detail-id> --profile soc"] },
|
|
1251
|
+
{ path: "entra multi-tenant-organization show", description: "Show the tenant multitenant organization with the full reviewed property set (createdDateTime, description, displayName, id, state); at most one exists per tenant and state inactive means no membership", operation: "GET:/tenantRelationships/multiTenantOrganization", flags: {
|
|
1252
|
+
...common,
|
|
1253
|
+
select: multiTenantOrganizationRead.select,
|
|
1254
|
+
fields: multiTenantOrganizationRead.fields,
|
|
1255
|
+
full: multiTenantOrganizationRead.full,
|
|
1256
|
+
scopes: multiTenantOrganizationRead.scopes,
|
|
1257
|
+
}, examples: ["mg-axi entra multi-tenant-organization show --profile soc", "mg-axi entra multi-tenant-organization show --profile soc --full"] },
|
|
1258
|
+
{ path: "entra multi-tenant-organization join-request show", description: "Show the tenant join-request record with the full reviewed property set (addedByTenantId, id, memberState, role, transitionDetails)", operation: "GET:/tenantRelationships/multiTenantOrganization/joinRequest", flags: {
|
|
1259
|
+
...common,
|
|
1260
|
+
select: multiTenantOrganizationRead.select,
|
|
1261
|
+
fields: multiTenantOrganizationRead.fields,
|
|
1262
|
+
full: multiTenantOrganizationRead.full,
|
|
1263
|
+
scopes: multiTenantOrganizationRead.scopes,
|
|
1264
|
+
}, examples: ["mg-axi entra multi-tenant-organization join-request show --profile soc", "mg-axi entra multi-tenant-organization join-request show --profile soc --full"] },
|
|
1265
|
+
{ path: "entra multi-tenant-organization tenant list", description: "List member tenants of the multitenant organization with compact properties (tenantId, displayName, role, state); --filter passes through as plain $filter", operation: "GET:/tenantRelationships/multiTenantOrganization/tenants", flags: {
|
|
1266
|
+
...common,
|
|
1267
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1268
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1269
|
+
filter: multiTenantOrganizationTenantRead.filter,
|
|
1270
|
+
select: multiTenantOrganizationTenantRead.select,
|
|
1271
|
+
fields: multiTenantOrganizationTenantRead.fields,
|
|
1272
|
+
full: multiTenantOrganizationTenantRead.full,
|
|
1273
|
+
cursor: multiTenantOrganizationTenantRead.cursor,
|
|
1274
|
+
scopes: multiTenantOrganizationTenantRead.scopes,
|
|
1275
|
+
}, examples: ["mg-axi entra multi-tenant-organization tenant list --profile soc", "mg-axi entra multi-tenant-organization tenant list --profile soc --limit 10", "mg-axi entra multi-tenant-organization tenant list --profile soc --filter \"state eq 'active'\""] },
|
|
1276
|
+
{ path: "entra multi-tenant-organization tenant count", description: "Count member tenants of the multitenant organization as one scalar; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/tenantRelationships/multiTenantOrganization/tenants/$count", flags: {
|
|
1277
|
+
...common,
|
|
1278
|
+
scopes: multiTenantOrganizationRead.scopes,
|
|
1279
|
+
}, examples: ["mg-axi entra multi-tenant-organization tenant count --profile soc"] },
|
|
1280
|
+
{ path: "entra tenant-information show", description: "Show tenant information for one Microsoft Entra tenant by domain name or tenant ID, with the full reviewed tenantInformation set (defaultDomainName, displayName, federationBrandName, tenantId); no Entra role is required and the lookup takes no --select, --filter, --limit or --cursor", operation: "GET:/tenantRelationships/findTenantInformationByDomainName(domainName='{domainName}')", flags: {
|
|
1281
|
+
...common,
|
|
1282
|
+
"domain-name": { value: "domain-name", description: "Primary domain name of the tenant; exactly one of --domain-name or --tenant-id" },
|
|
1283
|
+
"tenant-id": { value: "tenant-guid", description: "Unique tenant identifier (GUID); exactly one of --domain-name or --tenant-id" },
|
|
1284
|
+
full: tenantInformationRead.full,
|
|
1285
|
+
scopes: tenantInformationRead.scopes,
|
|
1286
|
+
}, examples: ["mg-axi entra tenant-information show --domain-name example.invalid --profile soc", "mg-axi entra tenant-information show --tenant-id <tenant-id> --profile soc"] },
|
|
1287
|
+
{ path: "entra sign-in list", description: "List sign-ins in a bounded time window (AuditLog.Read.All; delegated callers also need Global Reader, Reports Reader, Security Administrator, Security Operator or Security Reader; conservative P1/P2 deployment prerequisite)", operation: "GET:/auditLogs/signIns", flags: {
|
|
1288
|
+
...common,
|
|
1289
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1290
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1291
|
+
since: { ...logRead.since, description: "Required for a new query (resume with --cursor instead): earliest createdDateTime bounding the server time range" },
|
|
1292
|
+
until: logRead.until,
|
|
1293
|
+
filter: logRead.filter,
|
|
1294
|
+
select: logRead.select,
|
|
1295
|
+
fields: logRead.fields,
|
|
1296
|
+
full: logRead.full,
|
|
1297
|
+
cursor: logRead.cursor,
|
|
1298
|
+
scopes: logRead.scopes,
|
|
1299
|
+
}, examples: ["mg-axi entra sign-in list --profile soc --since 2026-09-01T00:00:00Z", "mg-axi entra sign-in list --profile soc --since 2026-09-01T00:00:00Z --filter \"status/errorCode ne 0\" --limit 10", "mg-axi entra sign-in list --profile soc --since 2026-09-01T00:00:00Z --until 2026-09-08T00:00:00Z --all"] },
|
|
1300
|
+
{ path: "entra sign-in show", description: "Show one sign-in with the full reviewed property set; absent CA policy detail reports its required policy permission and delegated role instead of an empty value", operation: "GET:/auditLogs/signIns/{signIn-id}", flags: {
|
|
1301
|
+
...common, id: { value: "sign-in-id", required: true, description: "Sign-in object ID" },
|
|
1302
|
+
select: logRead.select,
|
|
1303
|
+
fields: logRead.fields,
|
|
1304
|
+
full: logRead.full,
|
|
1305
|
+
scopes: logRead.scopes,
|
|
1306
|
+
}, examples: ["mg-axi entra sign-in show --id <sign-in-id> --profile soc", "mg-axi entra sign-in show --id <sign-in-id> --profile soc --full"] },
|
|
1307
|
+
{ path: "entra directory-audit list", description: "List directory audits in a bounded time window (AuditLog.Read.All; delegated callers also need Reports Reader, Security Administrator or Security Reader; conservative P1/P2 deployment prerequisite)", operation: "GET:/auditLogs/directoryAudits", flags: {
|
|
1308
|
+
...common,
|
|
1309
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1310
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1311
|
+
since: { ...logRead.since, description: "Required for a new query (resume with --cursor instead): earliest activityDateTime bounding the server time range" },
|
|
1312
|
+
until: logRead.until,
|
|
1313
|
+
filter: logRead.filter,
|
|
1314
|
+
select: logRead.select,
|
|
1315
|
+
fields: logRead.fields,
|
|
1316
|
+
full: logRead.full,
|
|
1317
|
+
cursor: logRead.cursor,
|
|
1318
|
+
scopes: logRead.scopes,
|
|
1319
|
+
}, examples: ["mg-axi entra directory-audit list --profile soc --since 2026-09-01T00:00:00Z", "mg-axi entra directory-audit list --profile soc --since 2026-09-01T00:00:00Z --filter \"category eq 'UserManagement'\"", "mg-axi entra directory-audit list --profile soc --since 2026-09-01T00:00:00Z --all"] },
|
|
1320
|
+
{ path: "entra directory-audit show", description: "Show one directory audit with the full reviewed property set", operation: "GET:/auditLogs/directoryAudits/{directoryAudit-id}", flags: {
|
|
1321
|
+
...common, id: { value: "directory-audit-id", required: true, description: "Directory audit object ID" },
|
|
1322
|
+
select: logRead.select,
|
|
1323
|
+
fields: logRead.fields,
|
|
1324
|
+
full: logRead.full,
|
|
1325
|
+
scopes: logRead.scopes,
|
|
1326
|
+
}, examples: ["mg-axi entra directory-audit show --id <directory-audit-id> --profile soc", "mg-axi entra directory-audit show --id <directory-audit-id> --profile soc --full"] },
|
|
1327
|
+
{ path: "entra application list", description: "List applications with compact properties (id, appId, displayName); appId is the client ID, distinct from the object id", operation: "GET:/applications", flags: {
|
|
1328
|
+
...common,
|
|
1329
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1330
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1331
|
+
filter: appRead.filter,
|
|
1332
|
+
select: appRead.select,
|
|
1333
|
+
fields: appRead.fields,
|
|
1334
|
+
full: appRead.full,
|
|
1335
|
+
cursor: appRead.cursor,
|
|
1336
|
+
scopes: appRead.scopes,
|
|
1337
|
+
}, examples: ["mg-axi entra application list --profile soc", "mg-axi entra application list --profile soc --limit 10", "mg-axi entra application list --profile soc --filter \"startswith(displayName,'A')\""] },
|
|
1338
|
+
{ path: "entra application show", description: "Show one application with credential expiry metadata only; never any secret value, hint or key material", operation: "GET:/applications/{application-id}", flags: {
|
|
1339
|
+
...common, id: { value: "application-object-id", required: true, description: "Application object ID; appId is the client ID, not the object ID" },
|
|
1340
|
+
select: appRead.select,
|
|
1341
|
+
fields: appRead.fields,
|
|
1342
|
+
full: appRead.full,
|
|
1343
|
+
scopes: appRead.scopes,
|
|
1344
|
+
}, examples: ["mg-axi entra application show --id <application-object-id> --profile soc", "mg-axi entra application show --id <application-object-id> --profile soc --full"] },
|
|
1345
|
+
{ path: "entra service-principal list", description: "List service principals with compact properties (id, appId, displayName); appId is the client ID, distinct from the object id", operation: "GET:/servicePrincipals", flags: {
|
|
1346
|
+
...common,
|
|
1347
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1348
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1349
|
+
filter: appRead.filter,
|
|
1350
|
+
select: appRead.select,
|
|
1351
|
+
fields: appRead.fields,
|
|
1352
|
+
full: appRead.full,
|
|
1353
|
+
cursor: appRead.cursor,
|
|
1354
|
+
scopes: appRead.scopes,
|
|
1355
|
+
}, examples: ["mg-axi entra service-principal list --profile soc", "mg-axi entra service-principal list --profile soc --limit 10"] },
|
|
1356
|
+
{ path: "entra service-principal show", description: "Show one service principal with richer default properties including servicePrincipalType", operation: "GET:/servicePrincipals/{servicePrincipal-id}", flags: {
|
|
1357
|
+
...common, id: { value: "service-principal-object-id", required: true, description: "Service principal object ID; appId is the client ID, not the object ID" },
|
|
1358
|
+
select: appRead.select,
|
|
1359
|
+
fields: appRead.fields,
|
|
1360
|
+
full: appRead.full,
|
|
1361
|
+
scopes: appRead.scopes,
|
|
1362
|
+
}, examples: ["mg-axi entra service-principal show --id <service-principal-object-id> --profile soc"] },
|
|
1363
|
+
{ path: "entra application owner list", description: "List owners of one application; rows carry @odata.type naming the owner kind", operation: "GET:/applications/{application-id}/owners", flags: {
|
|
1364
|
+
...common, application: { value: "application-object-id", required: true, description: "Application object ID whose owners are listed" },
|
|
1365
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1366
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1367
|
+
filter: ownerRead.filter,
|
|
1368
|
+
select: ownerRead.select,
|
|
1369
|
+
fields: ownerRead.fields,
|
|
1370
|
+
full: ownerRead.full,
|
|
1371
|
+
cursor: ownerRead.cursor,
|
|
1372
|
+
scopes: ownerRead.scopes,
|
|
1373
|
+
}, examples: ["mg-axi entra application owner list --application <application-object-id> --profile soc"] },
|
|
1374
|
+
{ path: "entra service-principal owner list", description: "List owners of one service principal; rows carry @odata.type naming the owner kind", operation: "GET:/servicePrincipals/{servicePrincipal-id}/owners", flags: {
|
|
1375
|
+
...common, "service-principal": { value: "service-principal-object-id", required: true, description: "Service principal object ID whose owners are listed" },
|
|
1376
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1377
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1378
|
+
filter: ownerRead.filter,
|
|
1379
|
+
select: ownerRead.select,
|
|
1380
|
+
fields: ownerRead.fields,
|
|
1381
|
+
full: ownerRead.full,
|
|
1382
|
+
cursor: ownerRead.cursor,
|
|
1383
|
+
scopes: ownerRead.scopes,
|
|
1384
|
+
}, examples: ["mg-axi entra service-principal owner list --service-principal <service-principal-object-id> --profile soc"] },
|
|
1385
|
+
{ path: "entra service-principal oauth2-grant list", description: "List delegated permission grants for one client service principal; rows are granted consent, distinct from the application's requested permissions", operation: "GET:/servicePrincipals/{servicePrincipal-id}/oauth2PermissionGrants", flags: {
|
|
1386
|
+
...common, "service-principal": { value: "service-principal-object-id", required: true, description: "Client service-principal object ID whose delegated grants are listed" },
|
|
1387
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1388
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1389
|
+
filter: grantRead.filter,
|
|
1390
|
+
select: grantRead.select,
|
|
1391
|
+
fields: grantRead.fields,
|
|
1392
|
+
full: grantRead.full,
|
|
1393
|
+
cursor: grantRead.cursor,
|
|
1394
|
+
scopes: grantRead.scopes,
|
|
1395
|
+
}, examples: ["mg-axi entra service-principal oauth2-grant list --service-principal <service-principal-object-id> --profile soc", "mg-axi entra service-principal oauth2-grant list --service-principal <service-principal-object-id> --profile soc --filter \"consentType eq 'AllPrincipals'\""] },
|
|
1396
|
+
{ path: "entra service-principal app-role-assignment list", description: "List app-only role assignments granted to one client service principal; rows are granted consent, distinct from the application's requested permissions", operation: "GET:/servicePrincipals/{servicePrincipal-id}/appRoleAssignments", flags: {
|
|
1397
|
+
...common, "service-principal": { value: "service-principal-object-id", required: true, description: "Client service-principal object ID whose app-only grants are listed" },
|
|
1398
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1399
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1400
|
+
filter: appRoleGrantRead.filter,
|
|
1401
|
+
select: appRoleGrantRead.select,
|
|
1402
|
+
fields: appRoleGrantRead.fields,
|
|
1403
|
+
full: appRoleGrantRead.full,
|
|
1404
|
+
cursor: appRoleGrantRead.cursor,
|
|
1405
|
+
scopes: appRoleGrantRead.scopes,
|
|
1406
|
+
}, examples: ["mg-axi entra service-principal app-role-assignment list --service-principal <service-principal-object-id> --profile soc"] },
|
|
1407
|
+
{ path: "entra risky-user list", description: "List at-risk users with compact risk state (IdentityRiskyUser.Read.All; delegated callers also need Global Reader, Security Operator, Security Reader or Security Administrator; the riskyUsers API requires P2)", operation: "GET:/identityProtection/riskyUsers", flags: {
|
|
1408
|
+
...common,
|
|
1409
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1410
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1411
|
+
filter: riskRead.filter,
|
|
1412
|
+
select: riskRead.select,
|
|
1413
|
+
fields: riskRead.fields,
|
|
1414
|
+
full: riskRead.full,
|
|
1415
|
+
cursor: riskRead.cursor,
|
|
1416
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to IdentityRiskyUser.Read.All" },
|
|
1417
|
+
}, examples: ["mg-axi entra risky-user list --profile soc", "mg-axi entra risky-user list --profile soc --filter \"riskState eq 'atRisk'\" --limit 10", "mg-axi entra risky-user list --profile soc --all"] },
|
|
1418
|
+
{ path: "entra risky-user show", description: "Show one at-risk user with the full reviewed property set and detection/sign-in correlation guidance; this read never confirms, dismisses or remediates risk", operation: "GET:/identityProtection/riskyUsers/{riskyUser-id}", flags: {
|
|
1419
|
+
...common, id: { value: "risky-user-id", required: true, description: "Risky user object ID" },
|
|
1420
|
+
select: riskRead.select,
|
|
1421
|
+
fields: riskRead.fields,
|
|
1422
|
+
full: riskRead.full,
|
|
1423
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to IdentityRiskyUser.Read.All" },
|
|
1424
|
+
}, examples: ["mg-axi entra risky-user show --id <risky-user-id> --profile soc", "mg-axi entra risky-user show --id <risky-user-id> --profile soc --full"] },
|
|
1425
|
+
{ path: "entra risky-user dismiss", description: "Dismiss one user's risk (WRITE-05): single-user POST with the current risk state previewed through the risky-user show route; dismissal is not remediation (it resets no credential and revokes no session); D/A IdentityRiskyUser.ReadWrite.All plus Security Administrator for delegated callers; the riskyUsers API requires P2", operation: "POST:/identityProtection/riskyUsers/dismiss", flags: {
|
|
1426
|
+
...common,
|
|
1427
|
+
user: { value: "risky-user-id", required: true, description: "Exactly one risky-user ID to dismiss; there is no bulk form" },
|
|
1428
|
+
execute: { description: "Send the dismissal after preview; without it the command only previews the current risk state and journals nothing" },
|
|
1429
|
+
confirm: { value: "risky-user-id", description: "Required with --execute: repeat the --user value exactly" },
|
|
1430
|
+
}, examples: ["mg-axi entra risky-user dismiss --user <risky-user-id> --profile soc", "mg-axi entra risky-user dismiss --user <risky-user-id> --execute --confirm '<risky-user-id>' --profile soc"] },
|
|
1431
|
+
{ path: "entra risk-detection list", description: "List risk detections in a bounded time window (IdentityRiskEvent.Read.All; delegated callers also need Global Reader, Security Operator, Security Reader or Security Administrator; P1 or P2, with premium detail limited without P2)", operation: "GET:/identityProtection/riskDetections", flags: {
|
|
1432
|
+
...common,
|
|
1433
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1434
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1435
|
+
since: { ...logRead.since, description: "Required for a new query (resume with --cursor instead): earliest detectedDateTime bounding the server time range" },
|
|
1436
|
+
until: logRead.until,
|
|
1437
|
+
filter: logRead.filter,
|
|
1438
|
+
select: riskRead.select,
|
|
1439
|
+
fields: riskRead.fields,
|
|
1440
|
+
full: riskRead.full,
|
|
1441
|
+
cursor: riskRead.cursor,
|
|
1442
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to IdentityRiskEvent.Read.All" },
|
|
1443
|
+
}, examples: ["mg-axi entra risk-detection list --profile soc --since 2026-09-01T00:00:00Z", "mg-axi entra risk-detection list --profile soc --since 2026-09-01T00:00:00Z --filter \"riskState eq 'atRisk'\" --limit 10", "mg-axi entra risk-detection list --profile soc --since 2026-09-01T00:00:00Z --all"] },
|
|
1444
|
+
{ path: "entra risk-detection show", description: "Show one risk detection with the full reviewed property set and sign-in correlation guidance; a null correlationId means no sign-in is associated and there is no riskySignIns endpoint", operation: "GET:/identityProtection/riskDetections/{riskDetection-id}", flags: {
|
|
1445
|
+
...common, id: { value: "risk-detection-id", required: true, description: "Risk detection object ID" },
|
|
1446
|
+
select: riskRead.select,
|
|
1447
|
+
fields: riskRead.fields,
|
|
1448
|
+
full: riskRead.full,
|
|
1449
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to IdentityRiskEvent.Read.All" },
|
|
1450
|
+
}, examples: ["mg-axi entra risk-detection show --id <risk-detection-id> --profile soc", "mg-axi entra risk-detection show --id <risk-detection-id> --profile soc --full"] },
|
|
1451
|
+
{ path: "entra conditional-access policy list", description: "List Conditional Access policies with compact properties (id, displayName, state)", operation: "GET:/identity/conditionalAccess/policies", flags: {
|
|
1452
|
+
...common,
|
|
1453
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1454
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1455
|
+
filter: caRead.filter,
|
|
1456
|
+
select: caRead.select,
|
|
1457
|
+
fields: caRead.fields,
|
|
1458
|
+
full: caRead.full,
|
|
1459
|
+
cursor: caRead.cursor,
|
|
1460
|
+
scopes: caRead.scopes,
|
|
1461
|
+
}, examples: ["mg-axi entra conditional-access policy list --profile soc", "mg-axi entra conditional-access policy list --profile soc --limit 10", "mg-axi entra conditional-access policy list --profile soc --filter \"state eq 'enabled'\" --select id,displayName,state"] },
|
|
1462
|
+
{ path: "entra conditional-access policy show", description: "Show one Conditional Access policy with the full reviewed condition and control set", operation: "GET:/identity/conditionalAccess/policies/{conditionalAccessPolicy-id}", flags: {
|
|
1463
|
+
...common, id: { value: "policy-id", required: true, description: "Conditional Access policy object ID" },
|
|
1464
|
+
select: caRead.select,
|
|
1465
|
+
fields: caRead.fields,
|
|
1466
|
+
full: caRead.full,
|
|
1467
|
+
scopes: caRead.scopes,
|
|
1468
|
+
}, examples: ["mg-axi entra conditional-access policy show --id <policy-id> --profile soc", "mg-axi entra conditional-access policy show --id <policy-id> --profile soc --full"] },
|
|
1469
|
+
{ path: "entra conditional-access policy update", description: "Update one Conditional Access policy with reviewed fields only (WRITE-04): current-versus-proposed preview, lockout analysis, no concurrency promise; disruptive and needs typed confirmation", operation: "PATCH:/identity/conditionalAccess/policies/{conditionalAccessPolicy-id}", flags: {
|
|
1470
|
+
...common,
|
|
1471
|
+
id: { value: "policy-id", required: true, description: "Conditional Access policy object ID to update" },
|
|
1472
|
+
"display-name": { value: "name", description: "Reviewed field: new policy display name" },
|
|
1473
|
+
state: { value: "enabled|enabledForReportingButNotEnforced|disabled", description: "Reviewed field: desired enforcement state" },
|
|
1474
|
+
conditions: { value: "json-object", description: "Reviewed field: full conditions block as a JSON object" },
|
|
1475
|
+
"grant-controls": { value: "json-object", description: "Reviewed field: full grantControls block as a JSON object" },
|
|
1476
|
+
"session-controls": { value: "json-object", description: "Reviewed field: full sessionControls block as a JSON object" },
|
|
1477
|
+
execute: { description: "Send the PATCH after preview; without it the command only previews the diff and lockout analysis and journals nothing" },
|
|
1478
|
+
confirm: { value: "policy-id", description: "Required with --execute: repeat the --id value exactly" },
|
|
1479
|
+
"acknowledge-lockout-risk": { description: "Required with --execute when the preview reports elevated lockout risk" },
|
|
1480
|
+
}, examples: ["mg-axi entra conditional-access policy update --id <policy-id> --state disabled --profile soc", "mg-axi entra conditional-access policy update --id <policy-id> --state enabled --execute --confirm '<policy-id>' --profile soc"] },
|
|
1481
|
+
{ path: "entra conditional-access named-location list", description: "List Conditional Access named locations with compact properties (id, displayName)", operation: "GET:/identity/conditionalAccess/namedLocations", flags: {
|
|
1482
|
+
...common,
|
|
1483
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1484
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1485
|
+
filter: caRead.filter,
|
|
1486
|
+
select: caRead.select,
|
|
1487
|
+
fields: caRead.fields,
|
|
1488
|
+
full: caRead.full,
|
|
1489
|
+
cursor: caRead.cursor,
|
|
1490
|
+
scopes: caRead.scopes,
|
|
1491
|
+
}, examples: ["mg-axi entra conditional-access named-location list --profile soc", "mg-axi entra conditional-access named-location list --profile soc --limit 10", "mg-axi entra conditional-access named-location list --profile soc --filter \"isTrusted eq true\""] },
|
|
1492
|
+
{ path: "entra conditional-access named-location show", description: "Show one Conditional Access named location with the full reviewed property set", operation: "GET:/identity/conditionalAccess/namedLocations/{namedLocation-id}", flags: {
|
|
1493
|
+
...common, id: { value: "named-location-id", required: true, description: "Named location object ID" },
|
|
1494
|
+
select: caRead.select,
|
|
1495
|
+
fields: caRead.fields,
|
|
1496
|
+
full: caRead.full,
|
|
1497
|
+
scopes: caRead.scopes,
|
|
1498
|
+
}, examples: ["mg-axi entra conditional-access named-location show --id <named-location-id> --profile soc", "mg-axi entra conditional-access named-location show --id <named-location-id> --profile soc --full"] },
|
|
1499
|
+
{ path: "entra identity-provider list", description: "List workforce identity providers with compact properties (id, displayName); rows carry @odata.type naming the provider kind; client secrets and key material are never returned", operation: "GET:/identity/identityProviders", flags: {
|
|
1500
|
+
...common,
|
|
1501
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1502
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1503
|
+
filter: providerRead.filter,
|
|
1504
|
+
select: providerRead.select,
|
|
1505
|
+
fields: providerRead.fields,
|
|
1506
|
+
full: providerRead.full,
|
|
1507
|
+
cursor: providerRead.cursor,
|
|
1508
|
+
scopes: providerRead.scopes,
|
|
1509
|
+
}, examples: ["mg-axi entra identity-provider list --profile soc", "mg-axi entra identity-provider list --profile soc --limit 10", "mg-axi entra identity-provider list --profile soc --filter \"identityProviderType eq 'Google'\""] },
|
|
1510
|
+
{ path: "entra identity-provider show", description: "Show one workforce identity provider with the full reviewed property set; client secrets and key material are never returned", operation: "GET:/identity/identityProviders/{identityProviderBase-id}", flags: {
|
|
1511
|
+
...common, id: { value: "provider-id", required: true, description: "Identity provider object ID" },
|
|
1512
|
+
select: providerRead.select,
|
|
1513
|
+
fields: providerRead.fields,
|
|
1514
|
+
full: providerRead.full,
|
|
1515
|
+
scopes: providerRead.scopes,
|
|
1516
|
+
}, examples: ["mg-axi entra identity-provider show --id <provider-id> --profile soc", "mg-axi entra identity-provider show --id <provider-id> --profile soc --full"] },
|
|
1517
|
+
{ path: "entra identity-provider count", description: "Count workforce identity providers as a scalar number; --filter narrows the count server-side", operation: "GET:/identity/identityProviders/$count", flags: {
|
|
1518
|
+
...common,
|
|
1519
|
+
filter: providerRead.filter,
|
|
1520
|
+
scopes: providerRead.scopes,
|
|
1521
|
+
}, examples: ["mg-axi entra identity-provider count --profile soc", "mg-axi entra identity-provider count --profile soc --filter \"identityProviderType eq 'Google'\""] },
|
|
1522
|
+
{ path: "entra identity-provider available-types", description: "List available workforce identity-provider types for the tenant; availability does not mean a provider is configured", operation: "GET:/identity/identityProviders/availableProviderTypes()", flags: {
|
|
1523
|
+
...common,
|
|
1524
|
+
scopes: providerRead.scopes,
|
|
1525
|
+
}, examples: ["mg-axi entra identity-provider available-types --profile soc"] },
|
|
1526
|
+
{ path: "entra federation-configuration list", description: "List workforce federation configurations with compact properties (id, displayName); rows carry @odata.type naming the configuration kind; signing-certificate blobs are omitted by default", operation: "GET:/directory/federationConfigurations", flags: {
|
|
1527
|
+
...common,
|
|
1528
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1529
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1530
|
+
filter: federationRead.filter,
|
|
1531
|
+
select: federationRead.select,
|
|
1532
|
+
fields: federationRead.fields,
|
|
1533
|
+
full: federationRead.full,
|
|
1534
|
+
cursor: federationRead.cursor,
|
|
1535
|
+
scopes: federationRead.scopes,
|
|
1536
|
+
}, examples: ["mg-axi entra federation-configuration list --profile soc", "mg-axi entra federation-configuration list --profile soc --limit 10"] },
|
|
1537
|
+
{ path: "entra federation-configuration show", description: "Show one workforce federation configuration with the full reviewed property set except the signing-certificate blob, which needs an explicit --select", operation: "GET:/directory/federationConfigurations/{identityProviderBase-id}", flags: {
|
|
1538
|
+
...common, id: { value: "configuration-id", required: true, description: "Federation configuration object ID" },
|
|
1539
|
+
select: federationRead.select,
|
|
1540
|
+
fields: federationRead.fields,
|
|
1541
|
+
full: federationRead.full,
|
|
1542
|
+
scopes: federationRead.scopes,
|
|
1543
|
+
}, examples: ["mg-axi entra federation-configuration show --id <configuration-id> --profile soc", "mg-axi entra federation-configuration show --id <configuration-id> --profile soc --full"] },
|
|
1544
|
+
{ path: "entra federation-configuration count", description: "Count workforce federation configurations as a scalar number; --filter narrows the count server-side", operation: "GET:/directory/federationConfigurations/$count", flags: {
|
|
1545
|
+
...common,
|
|
1546
|
+
filter: federationRead.filter,
|
|
1547
|
+
scopes: federationRead.scopes,
|
|
1548
|
+
}, examples: ["mg-axi entra federation-configuration count --profile soc"] },
|
|
1549
|
+
{ path: "entra federation-configuration available-types", description: "List available workforce federation provider types for the tenant; availability does not mean a federation configuration exists", operation: "GET:/directory/federationConfigurations/availableProviderTypes()", flags: {
|
|
1550
|
+
...common,
|
|
1551
|
+
scopes: federationRead.scopes,
|
|
1552
|
+
}, examples: ["mg-axi entra federation-configuration available-types --profile soc"] },
|
|
1553
|
+
{ path: "entra deleted-user list", description: "List soft-deleted users in the directory recycle bin with compact rows (id, displayName, deletedDateTime); rows carry @odata.type naming the kind; Graph requires the user cast, so no untyped list", operation: "GET:/directory/deletedItems/graph.user", flags: {
|
|
1554
|
+
...common,
|
|
1555
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1556
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1557
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed deleted-user set (id, displayName, userPrincipalName, mail, userType, deletedDateTime); deleted users are personal data and defaults stay minimal" },
|
|
1558
|
+
fields: deletedItemRead.fields,
|
|
1559
|
+
full: deletedItemRead.full,
|
|
1560
|
+
cursor: deletedItemRead.cursor,
|
|
1561
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to User.Read.All" },
|
|
1562
|
+
}, examples: ["mg-axi entra deleted-user list --profile soc", "mg-axi entra deleted-user list --profile soc --limit 10"] },
|
|
1563
|
+
{ path: "entra deleted-user count", description: "Count soft-deleted users as one scalar; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/directory/deletedItems/graph.user/$count", flags: {
|
|
1564
|
+
...common,
|
|
1565
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to User.Read.All" },
|
|
1566
|
+
}, examples: ["mg-axi entra deleted-user count --profile soc"] },
|
|
1567
|
+
{ path: "entra deleted-group list", description: "List soft-deleted groups in the directory recycle bin with compact rows (id, displayName, deletedDateTime); rows carry @odata.type naming the kind; read groupTypes to name the real kind", operation: "GET:/directory/deletedItems/graph.group", flags: {
|
|
1568
|
+
...common,
|
|
1569
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1570
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1571
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed deleted-group set (id, displayName, mail, mailNickname, groupTypes, visibility, securityEnabled, deletedDateTime)" },
|
|
1572
|
+
fields: deletedItemRead.fields,
|
|
1573
|
+
full: deletedItemRead.full,
|
|
1574
|
+
cursor: deletedItemRead.cursor,
|
|
1575
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Group.Read.All" },
|
|
1576
|
+
}, examples: ["mg-axi entra deleted-group list --profile soc", "mg-axi entra deleted-group list --profile soc --limit 10"] },
|
|
1577
|
+
{ path: "entra deleted-group count", description: "Count soft-deleted groups as one scalar; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/directory/deletedItems/graph.group/$count", flags: {
|
|
1578
|
+
...common,
|
|
1579
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Group.Read.All" },
|
|
1580
|
+
}, examples: ["mg-axi entra deleted-group count --profile soc"] },
|
|
1581
|
+
{ path: "entra deleted-application list", description: "List soft-deleted applications in the directory recycle bin with compact rows (id, appId, displayName, deletedDateTime); appId (client ID) is distinct from the object id; credential collections are never selectable", operation: "GET:/directory/deletedItems/graph.application", flags: {
|
|
1582
|
+
...common,
|
|
1583
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1584
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1585
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed deleted-application set (id, appId, displayName, publisherDomain, signInAudience, deletedDateTime); credential collections are never selectable" },
|
|
1586
|
+
fields: deletedItemRead.fields,
|
|
1587
|
+
full: deletedItemRead.full,
|
|
1588
|
+
cursor: deletedItemRead.cursor,
|
|
1589
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Application.Read.All" },
|
|
1590
|
+
}, examples: ["mg-axi entra deleted-application list --profile soc", "mg-axi entra deleted-application list --profile soc --limit 10"] },
|
|
1591
|
+
{ path: "entra deleted-application count", description: "Count soft-deleted applications as one scalar; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/directory/deletedItems/graph.application/$count", flags: {
|
|
1592
|
+
...common,
|
|
1593
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Application.Read.All" },
|
|
1594
|
+
}, examples: ["mg-axi entra deleted-application count --profile soc"] },
|
|
1595
|
+
{ path: "entra deleted-service-principal list", description: "List soft-deleted service principals in the directory recycle bin with compact rows (id, appId, displayName, deletedDateTime); appId (client ID) is distinct from the object id", operation: "GET:/directory/deletedItems/graph.servicePrincipal", flags: {
|
|
1596
|
+
...common,
|
|
1597
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1598
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1599
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed deleted-service-principal set (id, appId, displayName, servicePrincipalType, accountEnabled, deletedDateTime)" },
|
|
1600
|
+
fields: deletedItemRead.fields,
|
|
1601
|
+
full: deletedItemRead.full,
|
|
1602
|
+
cursor: deletedItemRead.cursor,
|
|
1603
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Application.Read.All" },
|
|
1604
|
+
}, examples: ["mg-axi entra deleted-service-principal list --profile soc", "mg-axi entra deleted-service-principal list --profile soc --limit 10"] },
|
|
1605
|
+
{ path: "entra deleted-service-principal count", description: "Count soft-deleted service principals as one scalar; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/directory/deletedItems/graph.servicePrincipal/$count", flags: {
|
|
1606
|
+
...common,
|
|
1607
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to Application.Read.All" },
|
|
1608
|
+
}, examples: ["mg-axi entra deleted-service-principal count --profile soc"] },
|
|
1609
|
+
{ path: "entra deleted-administrative-unit list", description: "List soft-deleted administrative units in the directory recycle bin with compact rows (id, displayName, deletedDateTime); rows carry @odata.type naming the kind", operation: "GET:/directory/deletedItems/graph.administrativeUnit", flags: {
|
|
1610
|
+
...common,
|
|
1611
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1612
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1613
|
+
select: { value: "comma-separated-properties", description: "Request server properties from the reviewed deleted-administrative-unit set (id, displayName, description, visibility, membershipType, deletedDateTime)" },
|
|
1614
|
+
fields: deletedItemRead.fields,
|
|
1615
|
+
full: deletedItemRead.full,
|
|
1616
|
+
cursor: deletedItemRead.cursor,
|
|
1617
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to AdministrativeUnit.Read.All" },
|
|
1618
|
+
}, examples: ["mg-axi entra deleted-administrative-unit list --profile soc", "mg-axi entra deleted-administrative-unit list --profile soc --limit 10"] },
|
|
1619
|
+
{ path: "entra deleted-administrative-unit count", description: "Count soft-deleted administrative units as one scalar; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/directory/deletedItems/graph.administrativeUnit/$count", flags: {
|
|
1620
|
+
...common,
|
|
1621
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit Graph scopes using full https://graph.microsoft.com/ names; defaults to AdministrativeUnit.Read.All" },
|
|
1622
|
+
}, examples: ["mg-axi entra deleted-administrative-unit count --profile soc"] },
|
|
1623
|
+
{ path: "entra deleted-item show", description: "Show one soft-deleted directory object by id with the cross-type safe properties (id, displayName, deletedDateTime) plus the @odata.type discriminator; per-type detail comes from the typed lists", operation: "GET:/directory/deletedItems/{directoryObject-id}", flags: {
|
|
1624
|
+
...common, id: { value: "object-id", required: true, description: "Deleted object ID" },
|
|
1625
|
+
select: deletedItemRead.select,
|
|
1626
|
+
fields: deletedItemRead.fields,
|
|
1627
|
+
full: deletedItemRead.full,
|
|
1628
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only and required for delegated access: pass the scope matching the object's type (User.Read.All, Group.Read.All, Application.Read.All or AdministrativeUnit.Read.All) using full https://graph.microsoft.com/ names" },
|
|
1629
|
+
}, examples: ["mg-axi entra deleted-item show --id <object-id> --profile soc --scopes https://graph.microsoft.com/User.Read.All"] },
|
|
1630
|
+
{ path: "entra data-policy-operation list", description: "List workforce data-policy operations with compact properties (id, status, userId, submittedDateTime); storageLocation always renders redacted and export submission is never sent; Graph documents $select only, so no --filter", operation: "GET:/dataPolicyOperations", flags: {
|
|
1631
|
+
...common,
|
|
1632
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1633
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1634
|
+
select: dataPolicyRead.select,
|
|
1635
|
+
fields: dataPolicyRead.fields,
|
|
1636
|
+
full: dataPolicyRead.full,
|
|
1637
|
+
cursor: dataPolicyRead.cursor,
|
|
1638
|
+
scopes: dataPolicyRead.scopes,
|
|
1639
|
+
}, examples: ["mg-axi entra data-policy-operation list --profile soc", "mg-axi entra data-policy-operation list --profile soc --limit 10"] },
|
|
1640
|
+
{ path: "entra data-policy-operation show", description: "Show one workforce data-policy operation with the full reviewed property set; storageLocation always renders redacted and export submission is never sent", operation: "GET:/dataPolicyOperations/{dataPolicyOperation-id}", flags: {
|
|
1641
|
+
...common, id: { value: "operation-id", required: true, description: "Data-policy-operation ID" },
|
|
1642
|
+
select: dataPolicyRead.select,
|
|
1643
|
+
fields: dataPolicyRead.fields,
|
|
1644
|
+
full: dataPolicyRead.full,
|
|
1645
|
+
scopes: dataPolicyRead.scopes,
|
|
1646
|
+
}, examples: ["mg-axi entra data-policy-operation show --id <operation-id> --profile soc", "mg-axi entra data-policy-operation show --id <operation-id> --profile soc --full"] },
|
|
1647
|
+
{ path: "entra data-policy-operation count", description: "Count workforce data-policy operations as a scalar number; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/dataPolicyOperations/$count", flags: {
|
|
1648
|
+
...common,
|
|
1649
|
+
scopes: dataPolicyRead.scopes,
|
|
1650
|
+
}, examples: ["mg-axi entra data-policy-operation count --profile soc"] },
|
|
1651
|
+
{ path: "entra access-review definition list", description: "List access-review definitions with compact properties (id, displayName, status); definitions are review schedules (a series), never their occurrences", operation: "GET:/identityGovernance/accessReviews/definitions", flags: {
|
|
1652
|
+
...common,
|
|
1653
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1654
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1655
|
+
filter: accessReviewRead.filter,
|
|
1656
|
+
select: accessReviewRead.select,
|
|
1657
|
+
fields: accessReviewRead.fields,
|
|
1658
|
+
full: accessReviewRead.full,
|
|
1659
|
+
cursor: accessReviewRead.cursor,
|
|
1660
|
+
scopes: accessReviewRead.scopes,
|
|
1661
|
+
}, examples: ["mg-axi entra access-review definition list --profile soc", "mg-axi entra access-review definition list --profile soc --limit 10", "mg-axi entra access-review definition list --profile soc --filter \"status eq 'InProgress'\""] },
|
|
1662
|
+
{ path: "entra access-review definition show", description: "Show one access-review definition with the full reviewed schedule set; a definition never carries its instances", operation: "GET:/identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinition-id}", flags: {
|
|
1663
|
+
...common, id: { value: "definition-id", required: true, description: "Access-review definition ID" },
|
|
1664
|
+
select: accessReviewRead.select,
|
|
1665
|
+
fields: accessReviewRead.fields,
|
|
1666
|
+
full: accessReviewRead.full,
|
|
1667
|
+
scopes: accessReviewRead.scopes,
|
|
1668
|
+
}, examples: ["mg-axi entra access-review definition show --id <definition-id> --profile soc", "mg-axi entra access-review definition show --id <definition-id> --profile soc --full"] },
|
|
1669
|
+
{ path: "entra access-review instance list", description: "List instances of one access-review definition (id, status, startDateTime, endDateTime); instances are occurrences of the schedule, never schedules themselves", operation: "GET:/identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinition-id}/instances", flags: {
|
|
1670
|
+
...common, definition: { value: "definition-id", required: true, description: "Parent access-review definition ID whose instances are listed" },
|
|
1671
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1672
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1673
|
+
filter: accessReviewRead.filter,
|
|
1674
|
+
select: accessReviewRead.select,
|
|
1675
|
+
fields: accessReviewRead.fields,
|
|
1676
|
+
full: accessReviewRead.full,
|
|
1677
|
+
cursor: accessReviewRead.cursor,
|
|
1678
|
+
scopes: accessReviewRead.scopes,
|
|
1679
|
+
}, examples: ["mg-axi entra access-review instance list --definition <definition-id> --profile soc", "mg-axi entra access-review instance list --definition <definition-id> --profile soc --filter \"status eq 'InProgress'\""] },
|
|
1680
|
+
{ path: "entra access-review instance show", description: "Show one access-review instance with the full reviewed occurrence set", operation: "GET:/identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinition-id}/instances/{accessReviewInstance-id}", flags: {
|
|
1681
|
+
...common, definition: { value: "definition-id", required: true, description: "Parent access-review definition ID" },
|
|
1682
|
+
id: { value: "instance-id", required: true, description: "Access-review instance ID" },
|
|
1683
|
+
select: accessReviewRead.select,
|
|
1684
|
+
fields: accessReviewRead.fields,
|
|
1685
|
+
full: accessReviewRead.full,
|
|
1686
|
+
scopes: accessReviewRead.scopes,
|
|
1687
|
+
}, examples: ["mg-axi entra access-review instance show --definition <definition-id> --id <instance-id> --profile soc", "mg-axi entra access-review instance show --definition <definition-id> --id <instance-id> --profile soc --full"] },
|
|
1688
|
+
{ path: "entra access-review decision list", description: "List decision items of one access-review instance (id, accessReviewId, decision, recommendation); decisions are read-only here and listing never approves, denies or applies anything", operation: "GET:/identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinition-id}/instances/{accessReviewInstance-id}/decisions", flags: {
|
|
1689
|
+
...common, definition: { value: "definition-id", required: true, description: "Parent access-review definition ID" },
|
|
1690
|
+
instance: { value: "instance-id", required: true, description: "Parent access-review instance ID whose decisions are listed" },
|
|
1691
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1692
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1693
|
+
filter: accessReviewRead.filter,
|
|
1694
|
+
select: accessReviewRead.select,
|
|
1695
|
+
fields: accessReviewRead.fields,
|
|
1696
|
+
full: accessReviewRead.full,
|
|
1697
|
+
cursor: accessReviewRead.cursor,
|
|
1698
|
+
scopes: accessReviewRead.scopes,
|
|
1699
|
+
}, examples: ["mg-axi entra access-review decision list --definition <definition-id> --instance <instance-id> --profile soc", "mg-axi entra access-review decision list --definition <definition-id> --instance <instance-id> --profile soc --filter \"decision eq 'NotReviewed'\""] },
|
|
1700
|
+
{ path: "entra access-review decision show", description: "Show one access-review decision item with the full reviewed outcome set; showing never approves, denies or applies anything", operation: "GET:/identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinition-id}/instances/{accessReviewInstance-id}/decisions/{accessReviewInstanceDecisionItem-id}", flags: {
|
|
1701
|
+
...common, definition: { value: "definition-id", required: true, description: "Parent access-review definition ID" },
|
|
1702
|
+
instance: { value: "instance-id", required: true, description: "Parent access-review instance ID" },
|
|
1703
|
+
id: { value: "decision-id", required: true, description: "Access-review decision item ID" },
|
|
1704
|
+
select: accessReviewRead.select,
|
|
1705
|
+
fields: accessReviewRead.fields,
|
|
1706
|
+
full: accessReviewRead.full,
|
|
1707
|
+
scopes: accessReviewRead.scopes,
|
|
1708
|
+
}, examples: ["mg-axi entra access-review decision show --definition <definition-id> --instance <instance-id> --id <decision-id> --profile soc"] },
|
|
1709
|
+
{ path: "entra access-review contacted-reviewer list", description: "List contacted reviewers of one access-review instance (id, displayName, userPrincipalName); reviewers recorded on the instance, whether or not notified, never review outcomes", operation: "GET:/identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinition-id}/instances/{accessReviewInstance-id}/contactedReviewers", flags: {
|
|
1710
|
+
...common, definition: { value: "definition-id", required: true, description: "Parent access-review definition ID" },
|
|
1711
|
+
instance: { value: "instance-id", required: true, description: "Parent access-review instance ID whose contacted reviewers are listed" },
|
|
1712
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1713
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1714
|
+
filter: accessReviewRead.filterReviewer,
|
|
1715
|
+
select: accessReviewRead.select,
|
|
1716
|
+
fields: accessReviewRead.fields,
|
|
1717
|
+
full: accessReviewRead.full,
|
|
1718
|
+
cursor: accessReviewRead.cursor,
|
|
1719
|
+
scopes: accessReviewRead.scopes,
|
|
1720
|
+
}, examples: ["mg-axi entra access-review contacted-reviewer list --definition <definition-id> --instance <instance-id> --profile soc"] },
|
|
1721
|
+
{ path: "entra access-review contacted-reviewer show", description: "Show one contacted reviewer with the full reviewed identity set", operation: "GET:/identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinition-id}/instances/{accessReviewInstance-id}/contactedReviewers/{accessReviewReviewer-id}", flags: {
|
|
1722
|
+
...common, definition: { value: "definition-id", required: true, description: "Parent access-review definition ID" },
|
|
1723
|
+
instance: { value: "instance-id", required: true, description: "Parent access-review instance ID" },
|
|
1724
|
+
id: { value: "reviewer-id", required: true, description: "Contacted reviewer ID" },
|
|
1725
|
+
select: accessReviewRead.select,
|
|
1726
|
+
fields: accessReviewRead.fields,
|
|
1727
|
+
full: accessReviewRead.full,
|
|
1728
|
+
scopes: accessReviewRead.scopes,
|
|
1729
|
+
}, examples: ["mg-axi entra access-review contacted-reviewer show --definition <definition-id> --instance <instance-id> --id <reviewer-id> --profile soc"] },
|
|
1730
|
+
{ path: "entra access-review stage list", description: "List stages of one access-review instance (id, status, startDateTime, endDateTime); stages are sequential phases, present only when the definition sets stageSettings", operation: "GET:/identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinition-id}/instances/{accessReviewInstance-id}/stages", flags: {
|
|
1731
|
+
...common, definition: { value: "definition-id", required: true, description: "Parent access-review definition ID" },
|
|
1732
|
+
instance: { value: "instance-id", required: true, description: "Parent access-review instance ID whose stages are listed" },
|
|
1733
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1734
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1735
|
+
filter: accessReviewRead.filterStage,
|
|
1736
|
+
select: accessReviewRead.select,
|
|
1737
|
+
fields: accessReviewRead.fields,
|
|
1738
|
+
full: accessReviewRead.full,
|
|
1739
|
+
cursor: accessReviewRead.cursor,
|
|
1740
|
+
scopes: accessReviewRead.scopes,
|
|
1741
|
+
}, examples: ["mg-axi entra access-review stage list --definition <definition-id> --instance <instance-id> --profile soc", "mg-axi entra access-review stage list --definition <definition-id> --instance <instance-id> --profile soc --filter \"status eq 'InProgress'\""] },
|
|
1742
|
+
{ path: "entra access-review stage show", description: "Show one access-review stage with the full reviewed phase set including reviewer scopes; per-stage decisions belong to a later slice", operation: "GET:/identityGovernance/accessReviews/definitions/{accessReviewScheduleDefinition-id}/instances/{accessReviewInstance-id}/stages/{accessReviewStage-id}", flags: {
|
|
1743
|
+
...common, definition: { value: "definition-id", required: true, description: "Parent access-review definition ID" },
|
|
1744
|
+
instance: { value: "instance-id", required: true, description: "Parent access-review instance ID" },
|
|
1745
|
+
id: { value: "stage-id", required: true, description: "Access-review stage ID" },
|
|
1746
|
+
select: accessReviewRead.select,
|
|
1747
|
+
fields: accessReviewRead.fields,
|
|
1748
|
+
full: accessReviewRead.full,
|
|
1749
|
+
scopes: accessReviewRead.scopes,
|
|
1750
|
+
}, examples: ["mg-axi entra access-review stage show --definition <definition-id> --instance <instance-id> --id <stage-id> --profile soc"] },
|
|
1751
|
+
{ path: "entra entitlement catalog list", description: "List entitlement catalogs with compact properties (id, displayName, state, catalogType); catalogs are package containers and never carry their access packages", operation: "GET:/identityGovernance/entitlementManagement/catalogs", flags: {
|
|
1752
|
+
...common,
|
|
1753
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1754
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1755
|
+
filter: entitlementRead.filter,
|
|
1756
|
+
select: entitlementRead.select,
|
|
1757
|
+
fields: entitlementRead.fields,
|
|
1758
|
+
full: entitlementRead.full,
|
|
1759
|
+
cursor: entitlementRead.cursor,
|
|
1760
|
+
scopes: entitlementRead.scopes,
|
|
1761
|
+
}, examples: ["mg-axi entra entitlement catalog list --profile soc", "mg-axi entra entitlement catalog list --profile soc --limit 10", "mg-axi entra entitlement catalog list --profile soc --filter \"state eq 'Published'\""] },
|
|
1762
|
+
{ path: "entra entitlement catalog show", description: "Show one entitlement catalog with the full reviewed container set", operation: "GET:/identityGovernance/entitlementManagement/catalogs/{accessPackageCatalog-id}", flags: {
|
|
1763
|
+
...common,
|
|
1764
|
+
id: { value: "catalog-id", required: true, description: "Entitlement catalog ID" },
|
|
1765
|
+
select: entitlementRead.select,
|
|
1766
|
+
fields: entitlementRead.fields,
|
|
1767
|
+
full: entitlementRead.full,
|
|
1768
|
+
scopes: entitlementRead.scopes,
|
|
1769
|
+
}, examples: ["mg-axi entra entitlement catalog show --id <catalog-id> --profile soc", "mg-axi entra entitlement catalog show --id <catalog-id> --profile soc --full"] },
|
|
1770
|
+
{ path: "entra entitlement catalog count", description: "Count entitlement catalogs as a scalar number; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/identityGovernance/entitlementManagement/catalogs/$count", flags: {
|
|
1771
|
+
...common,
|
|
1772
|
+
scopes: entitlementRead.scopes,
|
|
1773
|
+
}, examples: ["mg-axi entra entitlement catalog count --profile soc"] },
|
|
1774
|
+
{ path: "entra entitlement access-package list", description: "List access packages with compact properties (id, displayName, isHidden); assignment and request detail lives on the assignment reads, never on these reads", operation: "GET:/identityGovernance/entitlementManagement/accessPackages", flags: {
|
|
1775
|
+
...common,
|
|
1776
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1777
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1778
|
+
filter: entitlementRead.filter,
|
|
1779
|
+
select: entitlementRead.select,
|
|
1780
|
+
fields: entitlementRead.fields,
|
|
1781
|
+
full: entitlementRead.full,
|
|
1782
|
+
cursor: entitlementRead.cursor,
|
|
1783
|
+
scopes: entitlementRead.scopes,
|
|
1784
|
+
}, examples: ["mg-axi entra entitlement access-package list --profile soc", "mg-axi entra entitlement access-package list --profile soc --limit 10", "mg-axi entra entitlement access-package list --profile soc --filter \"isHidden eq false\""] },
|
|
1785
|
+
{ path: "entra entitlement access-package show", description: "Show one access package with the full reviewed bundle set", operation: "GET:/identityGovernance/entitlementManagement/accessPackages/{accessPackage-id}", flags: {
|
|
1786
|
+
...common,
|
|
1787
|
+
id: { value: "access-package-id", required: true, description: "Access package ID" },
|
|
1788
|
+
select: entitlementRead.select,
|
|
1789
|
+
fields: entitlementRead.fields,
|
|
1790
|
+
full: entitlementRead.full,
|
|
1791
|
+
scopes: entitlementRead.scopes,
|
|
1792
|
+
}, examples: ["mg-axi entra entitlement access-package show --id <access-package-id> --profile soc", "mg-axi entra entitlement access-package show --id <access-package-id> --profile soc --full"] },
|
|
1793
|
+
{ path: "entra entitlement access-package count", description: "Count access packages as a scalar number; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/identityGovernance/entitlementManagement/accessPackages/$count", flags: {
|
|
1794
|
+
...common,
|
|
1795
|
+
scopes: entitlementRead.scopes,
|
|
1796
|
+
}, examples: ["mg-axi entra entitlement access-package count --profile soc"] },
|
|
1797
|
+
{ path: "entra entitlement assignment-policy list", description: "List assignment policies of one access package (id, displayName, allowedTargetScope); policies name who may request and how approval and review run", operation: "GET:/identityGovernance/entitlementManagement/accessPackages/{accessPackage-id}/assignmentPolicies", flags: {
|
|
1798
|
+
...common,
|
|
1799
|
+
"access-package": { value: "access-package-id", required: true, description: "Parent access package ID whose assignment policies are listed" },
|
|
1800
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1801
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1802
|
+
filter: entitlementRead.filter,
|
|
1803
|
+
select: entitlementRead.select,
|
|
1804
|
+
fields: entitlementRead.fields,
|
|
1805
|
+
full: entitlementRead.full,
|
|
1806
|
+
cursor: entitlementRead.cursor,
|
|
1807
|
+
scopes: entitlementRead.scopes,
|
|
1808
|
+
}, examples: ["mg-axi entra entitlement assignment-policy list --access-package <access-package-id> --profile soc", "mg-axi entra entitlement assignment-policy list --access-package <access-package-id> --profile soc --filter \"allowedTargetScope eq 'specificDirectoryUsers'\""] },
|
|
1809
|
+
{ path: "entra entitlement assignment-policy show", description: "Show one assignment policy with the full reviewed request, approval and review set; questions and custom-extension stages belong to a later slice", operation: "GET:/identityGovernance/entitlementManagement/accessPackages/{accessPackage-id}/assignmentPolicies/{accessPackageAssignmentPolicy-id}", flags: {
|
|
1810
|
+
...common,
|
|
1811
|
+
"access-package": { value: "access-package-id", required: true, description: "Parent access package ID" },
|
|
1812
|
+
id: { value: "policy-id", required: true, description: "Assignment policy ID" },
|
|
1813
|
+
select: entitlementRead.select,
|
|
1814
|
+
fields: entitlementRead.fields,
|
|
1815
|
+
full: entitlementRead.full,
|
|
1816
|
+
scopes: entitlementRead.scopes,
|
|
1817
|
+
}, examples: ["mg-axi entra entitlement assignment-policy show --access-package <access-package-id> --id <policy-id> --profile soc"] },
|
|
1818
|
+
{ path: "entra entitlement assignment-policy count", description: "Count the assignment policies of one access package as a scalar number; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/identityGovernance/entitlementManagement/accessPackages/{accessPackage-id}/assignmentPolicies/$count", flags: {
|
|
1819
|
+
...common,
|
|
1820
|
+
"access-package": { value: "access-package-id", required: true, description: "Parent access package ID whose assignment policies are counted" },
|
|
1821
|
+
scopes: entitlementRead.scopes,
|
|
1822
|
+
}, examples: ["mg-axi entra entitlement assignment-policy count --access-package <access-package-id> --profile soc"] },
|
|
1823
|
+
{ path: "entra entitlement resource-role-scope list", description: "List resource-role scopes of one access package (id, createdDateTime); the linked role and scope detail needs $expand and belongs to a later slice", operation: "GET:/identityGovernance/entitlementManagement/accessPackages/{accessPackage-id}/resourceRoleScopes", flags: {
|
|
1824
|
+
...common,
|
|
1825
|
+
"access-package": { value: "access-package-id", required: true, description: "Parent access package ID whose resource-role scopes are listed" },
|
|
1826
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1827
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1828
|
+
filter: entitlementRead.filter,
|
|
1829
|
+
select: entitlementRead.select,
|
|
1830
|
+
fields: entitlementRead.fields,
|
|
1831
|
+
full: entitlementRead.full,
|
|
1832
|
+
cursor: entitlementRead.cursor,
|
|
1833
|
+
scopes: entitlementRead.scopes,
|
|
1834
|
+
}, examples: ["mg-axi entra entitlement resource-role-scope list --access-package <access-package-id> --profile soc"] },
|
|
1835
|
+
{ path: "entra entitlement resource-role-scope show", description: "Show one resource-role scope with the reviewed pairing set", operation: "GET:/identityGovernance/entitlementManagement/accessPackages/{accessPackage-id}/resourceRoleScopes/{accessPackageResourceRoleScope-id}", flags: {
|
|
1836
|
+
...common,
|
|
1837
|
+
"access-package": { value: "access-package-id", required: true, description: "Parent access package ID" },
|
|
1838
|
+
id: { value: "scope-id", required: true, description: "Resource-role scope ID" },
|
|
1839
|
+
select: entitlementRead.select,
|
|
1840
|
+
fields: entitlementRead.fields,
|
|
1841
|
+
full: entitlementRead.full,
|
|
1842
|
+
scopes: entitlementRead.scopes,
|
|
1843
|
+
}, examples: ["mg-axi entra entitlement resource-role-scope show --access-package <access-package-id> --id <scope-id> --profile soc"] },
|
|
1844
|
+
{ path: "entra entitlement resource-role-scope count", description: "Count the resource-role scopes of one access package as a scalar number; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/identityGovernance/entitlementManagement/accessPackages/{accessPackage-id}/resourceRoleScopes/$count", flags: {
|
|
1845
|
+
...common,
|
|
1846
|
+
"access-package": { value: "access-package-id", required: true, description: "Parent access package ID whose resource-role scopes are counted" },
|
|
1847
|
+
scopes: entitlementRead.scopes,
|
|
1848
|
+
}, examples: ["mg-axi entra entitlement resource-role-scope count --access-package <access-package-id> --profile soc"] },
|
|
1849
|
+
{ path: "entra entitlement assignment list", description: "List access-package assignments with compact linkage rows (id, state, targetId, targetDisplayName, accessPackageId, dates); rows flatten one fixed documented $expand and carry no justification or answers", operation: "GET:/identityGovernance/entitlementManagement/assignments", flags: {
|
|
1850
|
+
...common,
|
|
1851
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1852
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1853
|
+
filter: entitlementRead.filter,
|
|
1854
|
+
select: entitlementRead.select,
|
|
1855
|
+
fields: entitlementRead.fields,
|
|
1856
|
+
full: entitlementRead.full,
|
|
1857
|
+
cursor: entitlementRead.cursor,
|
|
1858
|
+
scopes: entitlementRead.scopes,
|
|
1859
|
+
}, examples: ["mg-axi entra entitlement assignment list --profile soc", "mg-axi entra entitlement assignment list --profile soc --limit 10", "mg-axi entra entitlement assignment list --profile soc --filter \"state eq 'Delivered'\""] },
|
|
1860
|
+
{ path: "entra entitlement assignment show", description: "Show one assignment with the full reviewed grant set and flattened target and access-package linkage", operation: "GET:/identityGovernance/entitlementManagement/assignments/{accessPackageAssignment-id}", flags: {
|
|
1861
|
+
...common,
|
|
1862
|
+
id: { value: "assignment-id", required: true, description: "Access-package assignment ID" },
|
|
1863
|
+
select: entitlementRead.select,
|
|
1864
|
+
fields: entitlementRead.fields,
|
|
1865
|
+
full: entitlementRead.full,
|
|
1866
|
+
scopes: entitlementRead.scopes,
|
|
1867
|
+
}, examples: ["mg-axi entra entitlement assignment show --id <assignment-id> --profile soc"] },
|
|
1868
|
+
{ path: "entra entitlement assignment count", description: "Count assignments as a scalar number; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/identityGovernance/entitlementManagement/assignments/$count", flags: {
|
|
1869
|
+
...common,
|
|
1870
|
+
scopes: entitlementRead.scopes,
|
|
1871
|
+
}, examples: ["mg-axi entra entitlement assignment count --profile soc"] },
|
|
1872
|
+
{ path: "entra entitlement assignment-request list", description: "List access-package assignment requests with compact linkage rows (id, requestType, state, accessPackageId, assignmentId, dates); justification text and answers ride only behind an explicit --select", operation: "GET:/identityGovernance/entitlementManagement/assignmentRequests", flags: {
|
|
1873
|
+
...common,
|
|
1874
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1875
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1876
|
+
filter: entitlementRead.filter,
|
|
1877
|
+
select: entitlementRead.select,
|
|
1878
|
+
fields: entitlementRead.fields,
|
|
1879
|
+
full: entitlementRead.full,
|
|
1880
|
+
cursor: entitlementRead.cursor,
|
|
1881
|
+
scopes: entitlementRead.scopes,
|
|
1882
|
+
}, examples: ["mg-axi entra entitlement assignment-request list --profile soc", "mg-axi entra entitlement assignment-request list --profile soc --limit 10", "mg-axi entra entitlement assignment-request list --profile soc --filter \"state eq 'Delivered'\""] },
|
|
1883
|
+
{ path: "entra entitlement assignment-request show", description: "Show one assignment request with the reviewed processing set and flattened linkage; justification and answers stay behind an explicit --select even here", operation: "GET:/identityGovernance/entitlementManagement/assignmentRequests/{accessPackageAssignmentRequest-id}", flags: {
|
|
1884
|
+
...common,
|
|
1885
|
+
id: { value: "request-id", required: true, description: "Access-package assignment request ID" },
|
|
1886
|
+
select: entitlementRead.select,
|
|
1887
|
+
fields: entitlementRead.fields,
|
|
1888
|
+
full: entitlementRead.full,
|
|
1889
|
+
scopes: entitlementRead.scopes,
|
|
1890
|
+
}, examples: ["mg-axi entra entitlement assignment-request show --id <request-id> --profile soc"] },
|
|
1891
|
+
{ path: "entra entitlement assignment-request count", description: "Count assignment requests as a scalar number; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/identityGovernance/entitlementManagement/assignmentRequests/$count", flags: {
|
|
1892
|
+
...common,
|
|
1893
|
+
scopes: entitlementRead.scopes,
|
|
1894
|
+
}, examples: ["mg-axi entra entitlement assignment-request count --profile soc"] },
|
|
1895
|
+
{ path: "entra lifecycle workflow list", description: "List lifecycle workflows with compact properties (id, displayName, category, isEnabled, isSchedulingEnabled); rows never carry tasks, runs or processing results", operation: "GET:/identityGovernance/lifecycleWorkflows/workflows", flags: {
|
|
1896
|
+
...common,
|
|
1897
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1898
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1899
|
+
filter: lifecycleWorkflowRead.filter,
|
|
1900
|
+
select: lifecycleWorkflowRead.select,
|
|
1901
|
+
fields: lifecycleWorkflowRead.fields,
|
|
1902
|
+
full: lifecycleWorkflowRead.full,
|
|
1903
|
+
cursor: lifecycleWorkflowRead.cursor,
|
|
1904
|
+
scopes: lifecycleWorkflowRead.scopes,
|
|
1905
|
+
}, examples: ["mg-axi entra lifecycle workflow list --profile soc", "mg-axi entra lifecycle workflow list --profile soc --limit 10", "mg-axi entra lifecycle workflow list --profile soc --filter \"category eq 'leaver'\""] },
|
|
1906
|
+
{ path: "entra lifecycle workflow show", description: "Show one lifecycle workflow with the full reviewed scalar set; tasks, runs and processing results belong to later slices", operation: "GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}", flags: {
|
|
1907
|
+
...common,
|
|
1908
|
+
id: { value: "workflow-id", required: true, description: "Lifecycle workflow ID" },
|
|
1909
|
+
select: lifecycleWorkflowRead.select,
|
|
1910
|
+
fields: lifecycleWorkflowRead.fields,
|
|
1911
|
+
full: lifecycleWorkflowRead.full,
|
|
1912
|
+
scopes: lifecycleWorkflowRead.scopes,
|
|
1913
|
+
}, examples: ["mg-axi entra lifecycle workflow show --id <workflow-id> --profile soc"] },
|
|
1914
|
+
{ path: "entra lifecycle workflow count", description: "Count lifecycle workflows as a scalar number; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/identityGovernance/lifecycleWorkflows/workflows/$count", flags: {
|
|
1915
|
+
...common,
|
|
1916
|
+
scopes: lifecycleWorkflowRead.scopes,
|
|
1917
|
+
}, examples: ["mg-axi entra lifecycle workflow count --profile soc"] },
|
|
1918
|
+
{ path: "entra lifecycle workflow-template list", description: "List lifecycle workflow templates with compact properties (id, displayName, category); template tasks belong to a later slice", operation: "GET:/identityGovernance/lifecycleWorkflows/workflowTemplates", flags: {
|
|
1919
|
+
...common,
|
|
1920
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1921
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1922
|
+
filter: lifecycleGovernanceRead.filter,
|
|
1923
|
+
select: lifecycleGovernanceRead.select,
|
|
1924
|
+
fields: lifecycleGovernanceRead.fields,
|
|
1925
|
+
full: lifecycleGovernanceRead.full,
|
|
1926
|
+
cursor: lifecycleGovernanceRead.cursor,
|
|
1927
|
+
scopes: lifecycleGovernanceRead.scopes,
|
|
1928
|
+
}, examples: ["mg-axi entra lifecycle workflow-template list --profile soc", "mg-axi entra lifecycle workflow-template list --profile soc --limit 10", "mg-axi entra lifecycle workflow-template list --profile soc --filter \"category eq 'joiner'\""] },
|
|
1929
|
+
{ path: "entra lifecycle workflow-template show", description: "Show one lifecycle workflow template with the reviewed set; Graph documents no query parameters here so rows always arrive whole", operation: "GET:/identityGovernance/lifecycleWorkflows/workflowTemplates/{workflowTemplate-id}", flags: {
|
|
1930
|
+
...common,
|
|
1931
|
+
id: { value: "template-id", required: true, description: "Workflow template ID" },
|
|
1932
|
+
fields: lifecycleGovernanceRead.fields,
|
|
1933
|
+
full: lifecycleGovernanceRead.full,
|
|
1934
|
+
scopes: lifecycleGovernanceRead.scopes,
|
|
1935
|
+
}, examples: ["mg-axi entra lifecycle workflow-template show --id <template-id> --profile soc"] },
|
|
1936
|
+
{ path: "entra lifecycle workflow-template count", description: "Count lifecycle workflow templates as a scalar number; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/identityGovernance/lifecycleWorkflows/workflowTemplates/$count", flags: {
|
|
1937
|
+
...common,
|
|
1938
|
+
scopes: lifecycleGovernanceRead.scopes,
|
|
1939
|
+
}, examples: ["mg-axi entra lifecycle workflow-template count --profile soc"] },
|
|
1940
|
+
{ path: "entra lifecycle task-definition list", description: "List lifecycle task definitions with compact properties (id, displayName, category, version); definitions carry no relationships", operation: "GET:/identityGovernance/lifecycleWorkflows/taskDefinitions", flags: {
|
|
1941
|
+
...common,
|
|
1942
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1943
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1944
|
+
filter: lifecycleGovernanceRead.filter,
|
|
1945
|
+
select: lifecycleGovernanceRead.select,
|
|
1946
|
+
fields: lifecycleGovernanceRead.fields,
|
|
1947
|
+
full: lifecycleGovernanceRead.full,
|
|
1948
|
+
cursor: lifecycleGovernanceRead.cursor,
|
|
1949
|
+
scopes: lifecycleGovernanceRead.scopes,
|
|
1950
|
+
}, examples: ["mg-axi entra lifecycle task-definition list --profile soc", "mg-axi entra lifecycle task-definition list --profile soc --limit 10", "mg-axi entra lifecycle task-definition list --profile soc --filter \"category eq 'joiner'\""] },
|
|
1951
|
+
{ path: "entra lifecycle task-definition show", description: "Show one lifecycle task definition with the full reviewed parameter set", operation: "GET:/identityGovernance/lifecycleWorkflows/taskDefinitions/{taskDefinition-id}", flags: {
|
|
1952
|
+
...common,
|
|
1953
|
+
id: { value: "task-definition-id", required: true, description: "Task definition ID" },
|
|
1954
|
+
select: lifecycleGovernanceRead.select,
|
|
1955
|
+
fields: lifecycleGovernanceRead.fields,
|
|
1956
|
+
full: lifecycleGovernanceRead.full,
|
|
1957
|
+
scopes: lifecycleGovernanceRead.scopes,
|
|
1958
|
+
}, examples: ["mg-axi entra lifecycle task-definition show --id <task-definition-id> --profile soc"] },
|
|
1959
|
+
{ path: "entra lifecycle task-definition count", description: "Count lifecycle task definitions as a scalar number; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/identityGovernance/lifecycleWorkflows/taskDefinitions/$count", flags: {
|
|
1960
|
+
...common,
|
|
1961
|
+
scopes: lifecycleGovernanceRead.scopes,
|
|
1962
|
+
}, examples: ["mg-axi entra lifecycle task-definition count --profile soc"] },
|
|
1963
|
+
{ path: "entra lifecycle settings show", description: "Show the lifecycle-workflows tenant settings (schedule interval, email and quarantine configuration); updating settings belongs to no read slice", operation: "GET:/identityGovernance/lifecycleWorkflows/settings", flags: {
|
|
1964
|
+
...common,
|
|
1965
|
+
select: lifecycleGovernanceRead.select,
|
|
1966
|
+
fields: lifecycleGovernanceRead.fields,
|
|
1967
|
+
full: lifecycleGovernanceRead.full,
|
|
1968
|
+
scopes: lifecycleGovernanceRead.scopes,
|
|
1969
|
+
}, examples: ["mg-axi entra lifecycle settings show --profile soc"] },
|
|
1970
|
+
{ path: "entra lifecycle run list", description: "List runs of one lifecycle workflow with compact properties (id, processingStatus, user counts); rows never carry processing results", operation: "GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}/runs", flags: {
|
|
1971
|
+
...common,
|
|
1972
|
+
workflow: lifecycleReportsRead.workflow,
|
|
1973
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
1974
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
1975
|
+
filter: lifecycleReportsRead.filter,
|
|
1976
|
+
select: lifecycleReportsRead.select,
|
|
1977
|
+
fields: lifecycleReportsRead.fields,
|
|
1978
|
+
full: lifecycleReportsRead.full,
|
|
1979
|
+
cursor: lifecycleReportsRead.cursor,
|
|
1980
|
+
scopes: lifecycleReportsRead.scopes,
|
|
1981
|
+
}, examples: ["mg-axi entra lifecycle run list --workflow <workflow-id> --profile soc", "mg-axi entra lifecycle run list --workflow <workflow-id> --profile soc --limit 10", "mg-axi entra lifecycle run list --workflow <workflow-id> --profile soc --filter \"processingStatus eq 'completed'\""] },
|
|
1982
|
+
{ path: "entra lifecycle run show", description: "Show one lifecycle workflow run with the full reviewed scalar set; processing results belong to later slices", operation: "GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}/runs/{run-id}", flags: {
|
|
1983
|
+
...common,
|
|
1984
|
+
workflow: lifecycleReportsRead.workflow,
|
|
1985
|
+
id: { value: "run-id", required: true, description: "Lifecycle workflow run ID" },
|
|
1986
|
+
select: lifecycleReportsRead.select,
|
|
1987
|
+
fields: lifecycleReportsRead.fields,
|
|
1988
|
+
full: lifecycleReportsRead.full,
|
|
1989
|
+
scopes: lifecycleReportsRead.scopes,
|
|
1990
|
+
}, examples: ["mg-axi entra lifecycle run show --workflow <workflow-id> --id <run-id> --profile soc"] },
|
|
1991
|
+
{ path: "entra lifecycle run count", description: "Count runs of one lifecycle workflow as a scalar number; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}/runs/$count", flags: {
|
|
1992
|
+
...common,
|
|
1993
|
+
workflow: lifecycleReportsRead.workflow,
|
|
1994
|
+
scopes: lifecycleReportsRead.scopes,
|
|
1995
|
+
}, examples: ["mg-axi entra lifecycle run count --workflow <workflow-id> --profile soc"] },
|
|
1996
|
+
{ path: "entra lifecycle user-processing-result list", description: "List user processing results of one lifecycle workflow with minimal personal-data properties (id, processingStatus, task counts); the subject link is never requested", operation: "GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}/userProcessingResults", flags: {
|
|
1997
|
+
...common,
|
|
1998
|
+
workflow: lifecycleReportsRead.workflow,
|
|
1999
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
2000
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
2001
|
+
filter: lifecycleReportsRead.filter,
|
|
2002
|
+
select: lifecycleReportsRead.select,
|
|
2003
|
+
fields: lifecycleReportsRead.fields,
|
|
2004
|
+
full: lifecycleReportsRead.full,
|
|
2005
|
+
cursor: lifecycleReportsRead.cursor,
|
|
2006
|
+
scopes: lifecycleReportsRead.scopes,
|
|
2007
|
+
}, examples: ["mg-axi entra lifecycle user-processing-result list --workflow <workflow-id> --profile soc", "mg-axi entra lifecycle user-processing-result list --workflow <workflow-id> --profile soc --limit 10"] },
|
|
2008
|
+
{ path: "entra lifecycle user-processing-result show", description: "Show one user processing result with minimal personal-data properties; the subject link stays out", operation: "GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}/userProcessingResults/{userProcessingResult-id}", flags: {
|
|
2009
|
+
...common,
|
|
2010
|
+
workflow: lifecycleReportsRead.workflow,
|
|
2011
|
+
id: { value: "user-processing-result-id", required: true, description: "User processing result ID" },
|
|
2012
|
+
select: lifecycleReportsRead.select,
|
|
2013
|
+
fields: lifecycleReportsRead.fields,
|
|
2014
|
+
full: lifecycleReportsRead.full,
|
|
2015
|
+
scopes: lifecycleReportsRead.scopes,
|
|
2016
|
+
}, examples: ["mg-axi entra lifecycle user-processing-result show --workflow <workflow-id> --id <result-id> --profile soc"] },
|
|
2017
|
+
{ path: "entra lifecycle user-processing-result count", description: "Count user processing results of one lifecycle workflow as a scalar number; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}/userProcessingResults/$count", flags: {
|
|
2018
|
+
...common,
|
|
2019
|
+
workflow: lifecycleReportsRead.workflow,
|
|
2020
|
+
scopes: lifecycleReportsRead.scopes,
|
|
2021
|
+
}, examples: ["mg-axi entra lifecycle user-processing-result count --workflow <workflow-id> --profile soc"] },
|
|
2022
|
+
{ path: "entra lifecycle subject-processing-result list", description: "List subject processing results of one lifecycle workflow with minimal personal-data properties; Graph documents no $select here so rows always arrive whole", operation: "GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}/subjectProcessingResults", flags: {
|
|
2023
|
+
...common,
|
|
2024
|
+
workflow: lifecycleSubjectRead.workflow,
|
|
2025
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
2026
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
2027
|
+
filter: lifecycleSubjectRead.filter,
|
|
2028
|
+
fields: lifecycleSubjectRead.fields,
|
|
2029
|
+
full: lifecycleSubjectRead.full,
|
|
2030
|
+
cursor: lifecycleSubjectRead.cursor,
|
|
2031
|
+
scopes: lifecycleSubjectRead.scopes,
|
|
2032
|
+
}, examples: ["mg-axi entra lifecycle subject-processing-result list --workflow <workflow-id> --profile soc", "mg-axi entra lifecycle subject-processing-result list --workflow <workflow-id> --profile soc --limit 10"] },
|
|
2033
|
+
{ path: "entra lifecycle subject-processing-result show", description: "Show one subject processing result with minimal personal-data properties; the get documents $expand only so the row always arrives whole and the subject navigation stays out", operation: "GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}/subjectProcessingResults/{subjectProcessingResult-id}", flags: {
|
|
2034
|
+
...common,
|
|
2035
|
+
workflow: lifecycleSubjectRead.workflow,
|
|
2036
|
+
id: { value: "subject-processing-result-id", required: true, description: "Subject processing result ID" },
|
|
2037
|
+
fields: lifecycleSubjectRead.fields,
|
|
2038
|
+
full: lifecycleSubjectRead.full,
|
|
2039
|
+
scopes: lifecycleSubjectRead.scopes,
|
|
2040
|
+
}, examples: ["mg-axi entra lifecycle subject-processing-result show --workflow <workflow-id> --id <result-id> --profile soc"] },
|
|
2041
|
+
{ path: "entra lifecycle subject-processing-result count", description: "Count subject processing results of one lifecycle workflow as a scalar number; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}/subjectProcessingResults/$count", flags: {
|
|
2042
|
+
...common,
|
|
2043
|
+
workflow: lifecycleSubjectRead.workflow,
|
|
2044
|
+
scopes: lifecycleSubjectRead.scopes,
|
|
2045
|
+
}, examples: ["mg-axi entra lifecycle subject-processing-result count --workflow <workflow-id> --profile soc"] },
|
|
2046
|
+
{ path: "entra lifecycle task-report list", description: "List task reports of one lifecycle workflow with compact properties (id, runId, processingStatus, user counts); rows never carry task, task-definition or processing-result detail", operation: "GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}/taskReports", flags: {
|
|
2047
|
+
...common,
|
|
2048
|
+
workflow: lifecycleTaskReportRead.workflow,
|
|
2049
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; the remainder is buffered into an opaque cursor, never discarded; incompatible with --all" },
|
|
2050
|
+
all: { description: "Follow pages within request, byte and deadline budgets" },
|
|
2051
|
+
filter: lifecycleTaskReportRead.filter,
|
|
2052
|
+
select: lifecycleTaskReportRead.select,
|
|
2053
|
+
fields: lifecycleTaskReportRead.fields,
|
|
2054
|
+
full: lifecycleTaskReportRead.full,
|
|
2055
|
+
cursor: lifecycleTaskReportRead.cursor,
|
|
2056
|
+
scopes: lifecycleTaskReportRead.scopes,
|
|
2057
|
+
}, examples: ["mg-axi entra lifecycle task-report list --workflow <workflow-id> --profile soc", "mg-axi entra lifecycle task-report list --workflow <workflow-id> --profile soc --limit 10", "mg-axi entra lifecycle task-report list --workflow <workflow-id> --profile soc --filter \"processingStatus eq 'completed'\""] },
|
|
2058
|
+
{ path: "entra lifecycle task-report show", description: "Show one task report with the full reviewed scalar set; Graph documents no query parameters here so the row always arrives whole and task, task-definition and processing-result detail belongs to later slices", operation: "GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}/taskReports/{taskReport-id}", flags: {
|
|
2059
|
+
...common,
|
|
2060
|
+
workflow: lifecycleTaskReportShow.workflow,
|
|
2061
|
+
id: lifecycleTaskReportShow.id,
|
|
2062
|
+
fields: lifecycleTaskReportShow.fields,
|
|
2063
|
+
full: lifecycleTaskReportShow.full,
|
|
2064
|
+
scopes: lifecycleTaskReportShow.scopes,
|
|
2065
|
+
}, examples: ["mg-axi entra lifecycle task-report show --workflow <workflow-id> --id <report-id> --profile soc"] },
|
|
2066
|
+
{ path: "entra lifecycle task-report count", description: "Count task reports of one lifecycle workflow as a scalar number; the $count route takes no --filter, --select, --limit or --cursor", operation: "GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}/taskReports/$count", flags: {
|
|
2067
|
+
...common,
|
|
2068
|
+
workflow: lifecycleTaskReportRead.workflow,
|
|
2069
|
+
scopes: lifecycleTaskReportRead.scopes,
|
|
2070
|
+
}, examples: ["mg-axi entra lifecycle task-report count --workflow <workflow-id> --profile soc"] },
|
|
2071
|
+
{ path: "entra lifecycle task-report task show", description: "Show the workflow task behind one task report with the full reviewed set including arguments; Graph documents no query parameters here so the row always arrives whole and task processing results belong to a later slice", operation: "GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}/taskReports/{taskReport-id}/task", flags: {
|
|
2072
|
+
...common,
|
|
2073
|
+
workflow: lifecycleTaskReportSubRead.workflow,
|
|
2074
|
+
report: lifecycleTaskReportSubRead.report,
|
|
2075
|
+
fields: lifecycleTaskReportSubRead.fields,
|
|
2076
|
+
full: lifecycleTaskReportSubRead.full,
|
|
2077
|
+
scopes: lifecycleTaskReportSubRead.scopes,
|
|
2078
|
+
}, examples: ["mg-axi entra lifecycle task-report task show --workflow <workflow-id> --report <report-id> --profile soc"] },
|
|
2079
|
+
{ path: "entra lifecycle task-report task-definition show", description: "Show the task definition behind one task report with the full reviewed parameter set; Graph documents no query parameters here so the row always arrives whole", operation: "GET:/identityGovernance/lifecycleWorkflows/workflows/{workflow-id}/taskReports/{taskReport-id}/taskDefinition", flags: {
|
|
2080
|
+
...common,
|
|
2081
|
+
workflow: lifecycleTaskReportSubRead.workflow,
|
|
2082
|
+
report: lifecycleTaskReportSubRead.report,
|
|
2083
|
+
fields: lifecycleTaskReportSubRead.fields,
|
|
2084
|
+
full: lifecycleTaskReportSubRead.full,
|
|
2085
|
+
scopes: lifecycleTaskReportSubRead.scopes,
|
|
2086
|
+
}, examples: ["mg-axi entra lifecycle task-report task-definition show --workflow <workflow-id> --report <report-id> --profile soc"] },
|
|
2087
|
+
{ path: "api get", description: "Reviewed read-only raw Graph GET (API-01, v1.0 only): users, groups, conditional access, authentication methods, audit/sign-in, risk, apps, roles/PIM, devices, administrative units, domains, domain DNS records, identity providers, organizations, branding, access reviews, entitlement catalogs and access packages, lifecycle workflows, workflow templates, task definitions, lifecycle settings, workflow runs, user/subject processing results and task reports, and partner contracts; unreviewed, secret-value, mail/file-content, beta and write routes are refused before credentials", positional: { name: "path", description: "Server-relative Graph path, e.g. /users" }, flags: {
|
|
2088
|
+
...common,
|
|
2089
|
+
odata: { value: "k=v&k2=v2", description: "OData query reviewed per route ($select/$filter/$top/$orderby on collections; $select on singles); defaults to reviewed fields" },
|
|
2090
|
+
cursor: { value: "token|-", description: "Resume a partial collection; - reads the token from stdin (16 MB ceiling for either input); use the same path, profile and scopes, and omit --odata to reuse its query" },
|
|
2091
|
+
scopes: { value: "comma-separated-Graph-scopes", description: "Delegated only: explicit full https://graph.microsoft.com/ scope names; application profiles use the .default audience" },
|
|
2092
|
+
limit: { value: "positive-integer", default: "100", description: "Cap returned rows; use --all to follow pages within budget" },
|
|
2093
|
+
all: { description: "Follow @odata.nextLink pages within the request budget" },
|
|
2094
|
+
full: { description: "Disable 4000-character string truncation; never disables redaction or row caps" },
|
|
2095
|
+
}, examples: ["mg-axi api get /users --scopes https://graph.microsoft.com/User.Read.All", "mg-axi api get /groups --odata '$filter=securityEnabled eq true&$top=5' --scopes https://graph.microsoft.com/GroupMember.Read.All", "mg-axi api get /users --cursor - --all --scopes https://graph.microsoft.com/User.Read.All < cursor.txt"] },
|
|
2096
|
+
];
|
|
2097
|
+
export function leafHelp(leaf) {
|
|
2098
|
+
return [
|
|
2099
|
+
`mg-axi ${leaf.path}${leaf.positional ? ` <${leaf.positional.name}>` : ""}`, leaf.description,
|
|
2100
|
+
...(leaf.positional ? [`<${leaf.positional.name}>: ${leaf.positional.description}`] : []),
|
|
2101
|
+
...Object.entries(leaf.flags).map(([name, flag]) => `--${name}${flag.value ? ` <${flag.value}>` : ""}: ${flag.description}${flag.default ? ` (default: ${flag.default})` : ""}${flag.required ? " (required)" : ""}`),
|
|
2102
|
+
"--help: Show this reference",
|
|
2103
|
+
...leaf.examples,
|
|
2104
|
+
].join("\n");
|
|
2105
|
+
}
|
|
2106
|
+
export const TOP_LEVEL_HELP = [DESCRIPTION, ...LEAVES.map(leaf => leafHelp(leaf)), "-v, -V, --version: Print the bare version"].join("\n\n");
|
|
2107
|
+
export function resolveCommand(argv) {
|
|
2108
|
+
const words = argv.slice(0, argv.findIndex(arg => arg.startsWith("-")) < 0 ? argv.length : argv.findIndex(arg => arg.startsWith("-")));
|
|
2109
|
+
const path = words.join(" ") || "home";
|
|
2110
|
+
let leaf = LEAVES.find(item => item.path === path);
|
|
2111
|
+
let positional;
|
|
2112
|
+
let flagStart = words.length;
|
|
2113
|
+
if (!leaf) {
|
|
2114
|
+
if (words[0] !== "api")
|
|
2115
|
+
throw new AxiError("unknown or incomplete command", "VALIDATION_ERROR", [TOP_LEVEL_HELP]);
|
|
2116
|
+
leaf = LEAVES.find(item => item.path === "api get");
|
|
2117
|
+
const help = leafHelp(leaf);
|
|
2118
|
+
const verb = words[1];
|
|
2119
|
+
if (verb === undefined)
|
|
2120
|
+
throw new AxiError("unknown or incomplete command", "VALIDATION_ERROR", [TOP_LEVEL_HELP]);
|
|
2121
|
+
if (verb.toLowerCase() !== "get")
|
|
2122
|
+
throw new AxiError(`mg-axi api serves reviewed GET reads only; got api ${verb}`, "VALIDATION_ERROR", [help]);
|
|
2123
|
+
if (words.length < 3 || words[2].startsWith("-"))
|
|
2124
|
+
throw new AxiError("missing path for `mg-axi api get`", "VALIDATION_ERROR", ["Example: mg-axi api get /users --scopes https://graph.microsoft.com/User.Read.All", help]);
|
|
2125
|
+
if (words.length > 3)
|
|
2126
|
+
throw new AxiError(`unexpected argument \`${words[3]}\` for \`mg-axi api get\``, "VALIDATION_ERROR", ["Pass one path before flags: mg-axi api get <path> [--odata 'k=v']", help]);
|
|
2127
|
+
positional = words[2];
|
|
2128
|
+
flagStart = 3;
|
|
2129
|
+
}
|
|
2130
|
+
const help = leafHelp(leaf);
|
|
2131
|
+
const fail = (message) => { throw new AxiError(message, "VALIDATION_ERROR", [help]); };
|
|
2132
|
+
const flags = Object.create(null);
|
|
2133
|
+
for (let i = flagStart; i < argv.length; i++) {
|
|
2134
|
+
const arg = argv[i];
|
|
2135
|
+
const match = /^--([a-z-]+)(?:=(.*))?$/.exec(arg);
|
|
2136
|
+
if (!match)
|
|
2137
|
+
fail("unexpected argument or short flag");
|
|
2138
|
+
const name = match[1];
|
|
2139
|
+
const flag = Object.hasOwn(leaf.flags, name) ? leaf.flags[name] : name === "help" ? { description: "Help" } : undefined;
|
|
2140
|
+
if (!flag)
|
|
2141
|
+
fail(leaf.path === "api get" && name === "query" ? "--query is reserved for output queries; use --odata for server OData parameters" : `unknown flag --${name}`);
|
|
2142
|
+
if (Object.hasOwn(flags, name))
|
|
2143
|
+
fail(`duplicate flag --${name}`);
|
|
2144
|
+
if (flag.value) {
|
|
2145
|
+
const value = match[2] ?? argv[++i];
|
|
2146
|
+
if (!value?.trim() || (value.startsWith("-") && !(name === "cursor" && value === "-" && String(flag.value ?? "").includes("|-"))))
|
|
2147
|
+
fail(`--${name} requires a non-empty value`);
|
|
2148
|
+
flags[name] = value;
|
|
2149
|
+
}
|
|
2150
|
+
else {
|
|
2151
|
+
if (match[2] !== undefined)
|
|
2152
|
+
fail(`--${name} does not take a value`);
|
|
2153
|
+
flags[name] = true;
|
|
2154
|
+
}
|
|
2155
|
+
}
|
|
2156
|
+
if (flags["api-version"] && !API_VERSIONS.includes(String(flags["api-version"])))
|
|
2157
|
+
fail(`--api-version must be ${API_VERSIONS.join(" or ")}`);
|
|
2158
|
+
if (flags.mode && !PARSE_MODES.includes(String(flags.mode)))
|
|
2159
|
+
fail("--mode must be delegated or application");
|
|
2160
|
+
if (flags.limit && (!/^[1-9]\d*$/.test(String(flags.limit)) || !Number.isSafeInteger(Number(flags.limit))))
|
|
2161
|
+
fail("--limit must be a positive safe integer");
|
|
2162
|
+
if (flags.limit && flags.all)
|
|
2163
|
+
fail("--limit and --all cannot be combined");
|
|
2164
|
+
if (!flags.help)
|
|
2165
|
+
for (const [name, flag] of Object.entries(leaf.flags))
|
|
2166
|
+
if (flag.required && !flags[name])
|
|
2167
|
+
fail(`--${name} is required`);
|
|
2168
|
+
if (!flags.help && leaf.positional && positional === undefined)
|
|
2169
|
+
fail(`missing ${leaf.positional.name} for \`mg-axi ${leaf.path}\``);
|
|
2170
|
+
return { leaf, flags, positional };
|
|
2171
|
+
}
|
|
2172
|
+
export function operationFor(leaf, version) {
|
|
2173
|
+
const inventory = JSON.parse(readFileSync(new URL("../inventory/operations.json", import.meta.url), "utf8"));
|
|
2174
|
+
return inventory.operations.find((row) => row.id === `${version}:${leaf.operation}`);
|
|
2175
|
+
}
|
|
2176
|
+
// Next-step hints shared by the no-args home view and the installable
|
|
2177
|
+
// skill, so the two cannot drift apart. home() prints them alongside live
|
|
2178
|
+
// profile status; skillDocument() in docs.ts reprints them.
|
|
2179
|
+
export const HOME_HELP = ["npx -y @knowttl/mg-axi setup", "npx -y @knowttl/mg-axi doctor", "npx -y @knowttl/mg-axi entra user list --help", "npx -y @knowttl/mg-axi entra user show --help", "npx -y @knowttl/mg-axi entra group list --help", "npx -y @knowttl/mg-axi entra group member list --help", "npx -y @knowttl/mg-axi entra application list --help", "npx -y @knowttl/mg-axi entra service-principal list --help", "npx -y @knowttl/mg-axi entra conditional-access policy list --help", "npx -y @knowttl/mg-axi api get --help"];
|
|
2180
|
+
// A useful local status, without treating unavailable tenant summaries as zeros.
|
|
2181
|
+
export function home() {
|
|
2182
|
+
const bin = resolve(process.argv[1]);
|
|
2183
|
+
return {
|
|
2184
|
+
bin: bin.startsWith(`${homedir()}${sep}`) ? `~${bin.slice(homedir().length)}` : bin,
|
|
2185
|
+
description: DESCRIPTION,
|
|
2186
|
+
profile: "unavailable: no profile configured",
|
|
2187
|
+
tenant: "unavailable: no tenant selected",
|
|
2188
|
+
domains: [{ name: "entra", status: "scheduled", summary: "Tenant summaries await Graph execution" }],
|
|
2189
|
+
help: [...HOME_HELP],
|
|
2190
|
+
};
|
|
2191
|
+
}
|