Skip to content

[pull] dev from KelvinTegelaar:dev#102

Open
pull[bot] wants to merge 7606 commits intocovenanttechnologysolutions:devfrom
KelvinTegelaar:dev
Open

[pull] dev from KelvinTegelaar:dev#102
pull[bot] wants to merge 7606 commits intocovenanttechnologysolutions:devfrom
KelvinTegelaar:dev

Conversation

@pull
Copy link
Copy Markdown

@pull pull bot commented Dec 2, 2025

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

@pull pull bot locked and limited conversation to collaborators Dec 2, 2025
@pull pull bot added the ⤵️ pull label Dec 2, 2025
JohnDuprey and others added 28 commits March 16, 2026 09:29
Add fallback lookup to auditLogs/signIns when a guest's signInActivity is null. Guests are now enriched with EnrichedLastSignInDateTime (from signInActivity or auditLogs) and only those with a last sign-in older than the cutoff are kept. Update disable flow to use the enriched timestamp in logs and mark accountEnabled = $false on success. Adjust reporting to include EnrichedLastSignInDateTime and only list currently enabled guests.
…itations, cancel meetings)

Add support for Exchange cloud-only Set-MailboxAutoReplyConfiguration
parameters: CreateOOFEvent, OOFEventSubject, AutoDeclineFutureRequestsWhenOOF,
DeclineEventsForScheduledOOF, DeclineAllEventsForScheduledOOF, and
DeclineMeetingMessage.

These are plumbed through all 3 OOO entry points:
- Set-CIPPOutOfOffice: 6 new [bool]/[string] params with PSBoundParameters guards
- Get-CIPPOutOfOffice: returns new fields + fixes null-safe StartTime/EndTime
- Invoke-ExecSetOoO: extracts calendar params from request body (Scheduled only)
- Set-CIPPVacationOOO: accepts StartTime/EndTime + calendar params; uses
  Scheduled state when dates are provided for Exchange calendar option support
- Invoke-ExecScheduleOOOVacation: converts epoch to datetime for Scheduled mode,
  conditionally attaches calendar params to the Add task

All changes are backwards compatible — callers that omit the new parameters
get identical behavior via $PSBoundParameters.ContainsKey() guards.
…orced

Add includeRoles/excludeRoles handling to Get-CIPPMFAState, mirroring
the existing group resolution pattern. This ensures that CA policies targeting specific roles are correctly evaluated
[pull] dev from KelvinTegelaar:dev
fix: Fix role-targeted CA policies in MFA report
Fallback to auditLogs for guest sign-ins
feat: Add includeUsage to ListTenantGroups endpoint
run now makes tasks actually run immediately
all user offboardings are now routed through scheduler for proper task tracking and alerting
KelvinTegelaar and others added 30 commits April 1, 2026 23:18
# Summary

Adds explicit displayName existence check during drift eval- the logic
count was seen as unchanged and the last detected state was aligned.
Fixes KelvinTegelaar/CIPP#5751

# Description

The drift optimization in Push-CIPPStandardsList was eagerly updating
the IntunePolicyTypeTracking cache before the standard actually ran, so
if a policy was deleted from Intune, subsequent runs saw "count
unchanged + compliant" and permanently skipped re-evaluation. The fix
adds a policy existence check — when the filter would skip an
IntuneTemplate standard, it now verifies the template's displayName
still exists in the bulk Graph response for that policy type, and if
it's missing (deleted), forces re-evaluation instead of trusting stale
compliance data. Additionally, Remove-CIPPCache now clears the
IntunePolicyTypeTracking table so that "Clear Cache" actually resets
drift optimization

# Testing

As a warning, others were having difficulty reproducing this.

1. Create an Intune configuration policy (e.g. "Test Config Refresh") in
a test tenant
2. In CIPP, create an Intune template from that policy and add it as a
drift standard for the tenant
3. Run drift - confirm it shows aligned
4. Delete "Test Config Refresh" from Intune
5. Run drift again - should now show not aligned (this is the bug fix,
previously it stayed aligned forever)
6. Run drift a third time - confirm it still shows not aligned (verifies
no regression from the tracking cache)
# Summary

`Remove-CIPPCache` now clears the `IntunePolicyTypeTracking` table when
performing a full cache clear. Related to
[KelvinTegelaar/CIPP#5751](KelvinTegelaar/CIPP#5751)

# Description

The "Clear Cache" action only removed tables matching `^cache`, which
didn't include `IntunePolicyTypeTracking`. This meant clearing cache had
no effect on drift optimization state - stale policy counts persisted
and the drift filter continued trusting old compliance data. The fix
adds an explicit removal of the `IntunePolicyTypeTracking` table
alongside the existing cache table cleanup.

# Testing

1. Run drift for a tenant with Intune template standards - confirm
alignment results
2. Go to CIPP > Clear Cache
3. Run drift again - confirm standards are fully re-evaluated (not
skipped by the optimization filter)
4. Check function logs for `Clearing Intune policy tracking data`
message during cache clear
…ion state

Comparison against Graph runs before remediation, but the compliance
report is written after using the same stale result. When a policy is
successfully deployed via remediate, the report still records
isCompliant:false from the pre-remediation check. This causes drift
deviations to persist as "Denied" even after successful DeniedRemediate.

Clear CompareResult on successful Set-CIPPIntunePolicy so the report
writes isCompliant:true. The 12-hour scheduled run re-compares against
Graph and corrects if the policy is actually out of line.
…IntuneTemplateNesting function for fixing nested RAWJson
# Summary

Updates `Invoke-CIPPStandardIntuneTemplate` to write post-remediation
compliance state instead of stale pre-remediation data. Fixes drift
deviations permanently showing "Denied" after successful DeniedRemediate
one-off remediation.

# Description

`Invoke-CIPPStandardIntuneTemplate` runs its Graph comparison before
remediation (~line 90-107) but writes the compliance report after (~line
178) using the same stale `$CompareResult`. When `Set-CIPPIntunePolicy`
successfully deploys a policy, `CippStandardsReports` still gets
`isCompliant:false` because it's based on the pre-remediation check
where the policy didn't exist yet. The `tenantDrift` table retains the
`DeniedRemediate` status, so drift keeps surfacing the deviation as
"Denied".

The fix clears `$CompareResult.compare`, sets `MatchFailed = $false`,
and `AssignmentsMatch = $true` after a successful `Set-CIPPIntunePolicy`
call (no exception thrown). If remediation fails, the catch block
preserves the original pre-remediation state. The next 12-hour scheduled
run re-compares against Graph and corrects the record if the policy is
actually out of line.

# Testing

1. Create a drift template with an Intune template (e.g. Config Refresh)
for a test tenant
2. Ensure the policy does **not** exist in the tenant's Intune
3. Run drift. Should show as a deviation (policy missing)
4. Mark the deviation as "Denied" (DeniedRemediate), this triggers a
one-off remediation task
5. Wait for the one-off task to complete and confirm the policy is
deployed in Intune
6. Run drift again. Deviation should no longer appear as "Denied" (this
is the bug fix, previously it stayed "Denied" forever)
7. Delete the policy from Intune and run drift again and it should show
as a new deviation (verifies no false-positive from the optimistic
update)
8. Test with a policy that cannot succeed (e.g. missing
license/capability, impossible assignment): DeniedRemediate fires,
deployment fails, deviation correctly (I think) stays "Denied" since
remediation was never actually applied
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.