Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
8ddd2b7
fix(wrapper-generator): map numeric parameter types by OpenAPI format
Joywambui-maina Aug 4, 2026
ca215f3
fix(wrapper-generator): correct four singularization words found by o…
Joywambui-maina Aug 3, 2026
c4d8545
fix(wrapper-generator): correct HostWhoi name, add Statistics invaria…
Joywambui-maina Aug 4, 2026
695cfe7
feat(wrapper-generator): add module packaging and smoke-test scripts
Joywambui-maina Aug 6, 2026
f2de362
fix(wrapper-generator): align emitted code with real kiota client output
Joywambui-maina Aug 6, 2026
26948e8
fix(wrapper-generator): correct PlaceCheckIn names, add Rights invari…
Joywambui-maina Aug 6, 2026
668a28d
fix(wrapper-generator): fail loudly on cmdlet file collisions
Joywambui-maina Aug 11, 2026
e6c98e4
feat(wrapper-generator): resolve cmdlet collisions via oracle-derived…
Joywambui-maina Aug 12, 2026
5608540
Potential fix for pull request finding
Joywambui-maina Aug 14, 2026
b7bf79a
Potential fix for pull request finding
Joywambui-maina Aug 14, 2026
2ed1ab3
Merge pull request #3713 from microsoftgraph/fix/cmdlet-file-collisions
Joywambui-maina Aug 14, 2026
e287a91
feat(wrapper-generator): complete v1.0 request-body binding
Joywambui-maina Aug 14, 2026
1b6f282
Merge powershell-v3 into feature/wrapper-module-packaging
Joywambui-maina Aug 14, 2026
3f99034
Merge feature/wrapper-module-packaging into feat/bind-request-body-pr…
Joywambui-maina Aug 14, 2026
dec945a
fix(wrapper-generator): align wrapper packaging projects
Joywambui-maina Aug 14, 2026
b1c7cb0
Merge branch 'feature/wrapper-module-packaging' into feat/bind-reques…
Joywambui-maina Aug 14, 2026
6addca0
feat(wrapper-generator): generate remaining OData operation shapes
Joywambui-maina Aug 18, 2026
db9f611
Merge remote-tracking branch 'origin/feat/bind-request-body-propertie…
Joywambui-maina Aug 18, 2026
c450ffc
feat(wrapper-generator): commit v1.0 wrapper sources under src/{Modul…
Joywambui-maina Aug 20, 2026
afebe5f
fix(wrapper-generator): correct wrapper package identity and Authenti…
Joywambui-maina Aug 21, 2026
7877dab
feat(wrapper-runtime): add shared runtime library with client-lifetim…
Joywambui-maina Aug 21, 2026
1689c38
feat(wrapper-generator): emit cmdlets on the shared runtime base class
Joywambui-maina Aug 21, 2026
faeef51
fix(wrapper-generator): resolve shared dependencies from the installe…
Joywambui-maina Aug 22, 2026
71478f7
fix(wrapper-generator): make wrapper packages installable from a feed
Joywambui-maina Aug 24, 2026
d17f0d9
feat(wrapper-generator): emit -All and nextLink following for list cm…
Joywambui-maina Aug 25, 2026
c8a833a
chore(wrapper-generator): regenerate the v1.0 corpus for -All pagination
Joywambui-maina Aug 25, 2026
1484db1
feat(wrapper-generator): emit deltaLink-aware pagination for delta op…
Joywambui-maina Aug 25, 2026
37bed0d
chore(wrapper-generator): regenerate the v1.0 corpus for delta pagina…
Joywambui-maina Aug 25, 2026
31d0b31
fix(wrapper-runtime): validate -DeltaLink against the session's servi…
Joywambui-maina Aug 26, 2026
958153e
fix(wrapper-generator): advertise the item model on delta cmdlets
Joywambui-maina Aug 26, 2026
f5b6ef5
test(wrapper-generator): pin delta emitter asserts to the current emi…
Joywambui-maina Aug 27, 2026
c76ba20
Merge powershell-v3 into feat/wrapper-delta
Joywambui-maina Aug 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 86 additions & 14 deletions src/Applications/wrapper/v1.0/Cmdlets/GetMgApplicationDelta.g.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,42 +14,57 @@
namespace Microsoft.Graph.PowerShell.Applications
{
[GraphRoute("GET", "/applications/delta()")]
[Cmdlet(VerbsCommon.Get, "MgApplicationDelta")]
[OutputType(typeof(global::Microsoft.Graph.PowerShell.Applications.Client.Applications.Delta.DeltaGetResponse))]
[Cmdlet(VerbsCommon.Get, "MgApplicationDelta", DefaultParameterSetName = "DeltaSync")]
[OutputType(typeof(Microsoft.Graph.PowerShell.Applications.Client.Models.Application))]
public class GetMgApplicationDeltaCommand : GraphClientCmdlet
{





[Parameter(Mandatory = false)]
[Parameter(Mandatory = false, ParameterSetName = "DeltaSync")]
public string? Filter { get; set; }

[Parameter(Mandatory = false)]
[Parameter(Mandatory = false, ParameterSetName = "DeltaSync")]
[Alias("Select")]
public string[]? Property { get; set; }

[Parameter(Mandatory = false)]
[Parameter(Mandatory = false, ParameterSetName = "DeltaSync")]
[Alias("Expand")]
public string[]? ExpandProperty { get; set; }

[Parameter(Mandatory = false)]
[Parameter(Mandatory = false, ParameterSetName = "DeltaSync")]
[Alias("OrderBy")]
public string[]? Sort { get; set; }

[Parameter(Mandatory = false)]
[Parameter(Mandatory = false, ParameterSetName = "DeltaSync")]
public string? Search { get; set; }

[Parameter(Mandatory = false)]
[Parameter(Mandatory = false, ParameterSetName = "DeltaSync")]
public int Top { get; set; }

[Parameter(Mandatory = false)]
[Parameter(Mandatory = false, ParameterSetName = "DeltaSync")]
public int Skip { get; set; }

[Parameter(Mandatory = false)]
[Parameter(Mandatory = false, ParameterSetName = "DeltaSync")]
public SwitchParameter Count { get; set; }

// Resumes a previous sync from the link that run published. Universal: every delta
// request builder accepts a raw URL, whereas a token argument exists on only a few.
[Parameter(Mandatory = true, ParameterSetName = "Resume")]
public string DeltaLink { get; set; } = string.Empty;

// Follows @odata.nextLink through the change set. Without it only the first page returns,
// plus a warning when more pages exist.
[Parameter(Mandatory = false)]
public SwitchParameter All { get; set; }

// Receives the @odata.deltaLink that terminates the change set, for the next sync round.
// A named variable is how this SDK already returns a scalar alongside a pipeline
// (-CountVariable on the published list cmdlets).
[Parameter(Mandatory = false)]
[Alias("DLV")]
public string? DeltaLinkVariable { get; set; }



Expand All @@ -59,11 +74,21 @@ protected override void ProcessRecord()
var requestAdapter = GetRequestAdapter();
var client = new ApiClient(requestAdapter);

// Cleared before the request so a failed or interrupted run cannot leave the previous
// run's link readable, which would silently resume from the wrong point.
if (this.IsParameterBound(nameof(DeltaLinkVariable)))
SessionState.PSVariable.Set(DeltaLinkVariable, null);

global::Microsoft.Graph.PowerShell.Applications.Client.Applications.Delta.DeltaGetResponse? result;
try
{
result = client.Applications.Delta.GetAsDeltaGetResponseAsync(requestConfiguration =>
result = ParameterSetName == "Resume"
? client.Applications.Delta.WithUrl(ValidateContinuationUrl(DeltaLink!, requestAdapter, nameof(DeltaLink))).GetAsDeltaGetResponseAsync(requestConfiguration =>
{

AddRequestHeaders(requestConfiguration.Headers);
}).GetAwaiter().GetResult()
: client.Applications.Delta.GetAsDeltaGetResponseAsync(requestConfiguration =>
{
if (this.IsParameterBound(nameof(Filter)))
requestConfiguration.QueryParameters.Filter = Filter;
Expand Down Expand Up @@ -91,14 +116,61 @@ protected override void ProcessRecord()

AddRequestHeaders(requestConfiguration.Headers);
}).GetAwaiter().GetResult();

var fetched = 0;
while (true)
{
if (result?.Value is { } items)
{
WriteObject(items, enumerateCollection: true);
fetched += items.Count;
}

var nextLink = result?.OdataNextLink;
var deltaLink = result?.OdataDeltaLink;

// A response cannot be both continued and terminated; treating one as
// authoritative would silently drop pages or resume from a partial set.
if (!string.IsNullOrEmpty(nextLink) && !string.IsNullOrEmpty(deltaLink))
{
ThrowTerminatingError(new ErrorRecord(
new InvalidOperationException("The response carries both @odata.nextLink and @odata.deltaLink, which is not a valid delta response."),
"InvalidDeltaResponse", ErrorCategory.InvalidData, targetObject: null));
return;
}

if (!string.IsNullOrEmpty(deltaLink))
{
if (this.IsParameterBound(nameof(DeltaLinkVariable)))
SessionState.PSVariable.Set(DeltaLinkVariable, deltaLink);
break;
}

// No link of either kind: the change set ends here and there is nothing to
// publish for a next round.
if (string.IsNullOrEmpty(nextLink)) break;

if (!All.IsPresent)
{
WriteWarning("More results are available. Use -All to return all pages.");
break;
}

if (Stopping) break;
if (this.IsParameterBound(nameof(Top)) && fetched >= Top) break;

result = client.Applications.Delta.WithUrl(nextLink).GetAsDeltaGetResponseAsync(requestConfiguration =>
{

AddRequestHeaders(requestConfiguration.Headers);
}).GetAwaiter().GetResult();
}
}
catch (Exception ex) when (ex is not PipelineStoppedException)
{
ThrowGraphRequestFailed(ex, null);
return;
}

WriteObject(result);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,42 +14,57 @@
namespace Microsoft.Graph.PowerShell.Applications
{
[GraphRoute("GET", "/servicePrincipals/delta()")]
[Cmdlet(VerbsCommon.Get, "MgServicePrincipalDelta")]
[OutputType(typeof(global::Microsoft.Graph.PowerShell.Applications.Client.ServicePrincipals.Delta.DeltaGetResponse))]
[Cmdlet(VerbsCommon.Get, "MgServicePrincipalDelta", DefaultParameterSetName = "DeltaSync")]
[OutputType(typeof(Microsoft.Graph.PowerShell.Applications.Client.Models.ServicePrincipal))]
public class GetMgServicePrincipalDeltaCommand : GraphClientCmdlet
{





[Parameter(Mandatory = false)]
[Parameter(Mandatory = false, ParameterSetName = "DeltaSync")]
public string? Filter { get; set; }

[Parameter(Mandatory = false)]
[Parameter(Mandatory = false, ParameterSetName = "DeltaSync")]
[Alias("Select")]
public string[]? Property { get; set; }

[Parameter(Mandatory = false)]
[Parameter(Mandatory = false, ParameterSetName = "DeltaSync")]
[Alias("Expand")]
public string[]? ExpandProperty { get; set; }

[Parameter(Mandatory = false)]
[Parameter(Mandatory = false, ParameterSetName = "DeltaSync")]
[Alias("OrderBy")]
public string[]? Sort { get; set; }

[Parameter(Mandatory = false)]
[Parameter(Mandatory = false, ParameterSetName = "DeltaSync")]
public string? Search { get; set; }

[Parameter(Mandatory = false)]
[Parameter(Mandatory = false, ParameterSetName = "DeltaSync")]
public int Top { get; set; }

[Parameter(Mandatory = false)]
[Parameter(Mandatory = false, ParameterSetName = "DeltaSync")]
public int Skip { get; set; }

[Parameter(Mandatory = false)]
[Parameter(Mandatory = false, ParameterSetName = "DeltaSync")]
public SwitchParameter Count { get; set; }

// Resumes a previous sync from the link that run published. Universal: every delta
// request builder accepts a raw URL, whereas a token argument exists on only a few.
[Parameter(Mandatory = true, ParameterSetName = "Resume")]
public string DeltaLink { get; set; } = string.Empty;

// Follows @odata.nextLink through the change set. Without it only the first page returns,
// plus a warning when more pages exist.
[Parameter(Mandatory = false)]
public SwitchParameter All { get; set; }

// Receives the @odata.deltaLink that terminates the change set, for the next sync round.
// A named variable is how this SDK already returns a scalar alongside a pipeline
// (-CountVariable on the published list cmdlets).
[Parameter(Mandatory = false)]
[Alias("DLV")]
public string? DeltaLinkVariable { get; set; }



Expand All @@ -59,11 +74,21 @@ protected override void ProcessRecord()
var requestAdapter = GetRequestAdapter();
var client = new ApiClient(requestAdapter);

// Cleared before the request so a failed or interrupted run cannot leave the previous
// run's link readable, which would silently resume from the wrong point.
if (this.IsParameterBound(nameof(DeltaLinkVariable)))
SessionState.PSVariable.Set(DeltaLinkVariable, null);

global::Microsoft.Graph.PowerShell.Applications.Client.ServicePrincipals.Delta.DeltaGetResponse? result;
try
{
result = client.ServicePrincipals.Delta.GetAsDeltaGetResponseAsync(requestConfiguration =>
result = ParameterSetName == "Resume"
? client.ServicePrincipals.Delta.WithUrl(ValidateContinuationUrl(DeltaLink!, requestAdapter, nameof(DeltaLink))).GetAsDeltaGetResponseAsync(requestConfiguration =>
{

AddRequestHeaders(requestConfiguration.Headers);
}).GetAwaiter().GetResult()
: client.ServicePrincipals.Delta.GetAsDeltaGetResponseAsync(requestConfiguration =>
{
if (this.IsParameterBound(nameof(Filter)))
requestConfiguration.QueryParameters.Filter = Filter;
Expand Down Expand Up @@ -91,14 +116,61 @@ protected override void ProcessRecord()

AddRequestHeaders(requestConfiguration.Headers);
}).GetAwaiter().GetResult();

var fetched = 0;
while (true)
{
if (result?.Value is { } items)
{
WriteObject(items, enumerateCollection: true);
fetched += items.Count;
}

var nextLink = result?.OdataNextLink;
var deltaLink = result?.OdataDeltaLink;

// A response cannot be both continued and terminated; treating one as
// authoritative would silently drop pages or resume from a partial set.
if (!string.IsNullOrEmpty(nextLink) && !string.IsNullOrEmpty(deltaLink))
{
ThrowTerminatingError(new ErrorRecord(
new InvalidOperationException("The response carries both @odata.nextLink and @odata.deltaLink, which is not a valid delta response."),
"InvalidDeltaResponse", ErrorCategory.InvalidData, targetObject: null));
return;
}

if (!string.IsNullOrEmpty(deltaLink))
{
if (this.IsParameterBound(nameof(DeltaLinkVariable)))
SessionState.PSVariable.Set(DeltaLinkVariable, deltaLink);
break;
}

// No link of either kind: the change set ends here and there is nothing to
// publish for a next round.
if (string.IsNullOrEmpty(nextLink)) break;

if (!All.IsPresent)
{
WriteWarning("More results are available. Use -All to return all pages.");
break;
}

if (Stopping) break;
if (this.IsParameterBound(nameof(Top)) && fetched >= Top) break;

result = client.ServicePrincipals.Delta.WithUrl(nextLink).GetAsDeltaGetResponseAsync(requestConfiguration =>
{

AddRequestHeaders(requestConfiguration.Headers);
}).GetAwaiter().GetResult();
}
}
catch (Exception ex) when (ex is not PipelineStoppedException)
{
ThrowGraphRequestFailed(ex, null);
return;
}

WriteObject(result);
}
}
}
Loading
Loading