Skip to content

[pull] dev from KelvinTegelaar:dev#93

Open
pull[bot] wants to merge 214 commits intoisgq-github01:devfrom
KelvinTegelaar:dev
Open

[pull] dev from KelvinTegelaar:dev#93
pull[bot] wants to merge 214 commits intoisgq-github01:devfrom
KelvinTegelaar:dev

Conversation

@pull
Copy link
Copy Markdown

@pull pull bot commented Mar 20, 2026

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 : )

kris6673 and others added 16 commits November 19, 2025 18:59
on-premises mailboxes standard
…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.
[pull] dev from KelvinTegelaar:dev
Refactor license utilization checks to return structured alert data for Entra ID P1 and P2 licenses. This change enhances the clarity of alert messages and includes detailed information such as usage percentage, overage, and thresholds.
The previous implementation batched all MFA method deletions into a single Graph bulk request, which introduced two problems:

1. Duplicate method types (e.g. two phone numbers) could collide within the same batch, causing one of the requests to fail silently.
2. The success/failure check only inspected a single status code from the bulk response. If one method was removed but another failed, the function logged full success — leaving the user's MFA partially intact despite the log stating otherwise.

Switching to a sequential foreach loop eliminates the collision window and tracks successes and failures independently, so partial failures are reported accurately.
- Improved condition handling in Test-DeltaQueryConditions to sanitize inputs and prevent invalid conditions from being processed.
- Added validation for dynamic rules in Invoke-ExecTenantGroup to prevent code injection by restricting allowed operators and properties.
- Implemented error handling and validation for conditions in Invoke-AddAlert, ensuring only safe operators and properties are processed.
- Updated New-CIPPAlertTemplate to include a CustomSubject parameter for more flexible alert titles.
- Refactored Update-CIPPDynamicTenantGroups to utilize a safer evaluation method for dynamic group rules, ensuring only valid conditions are processed.
- Enhanced webhook processing in Invoke-CIPPWebhookProcessing to include custom subjects from webhook rules for better context in alerts.
@pull pull bot locked and limited conversation to collaborators Mar 20, 2026
@pull pull bot added the ⤵️ pull label Mar 20, 2026
TecharyJames and others added 12 commits March 20, 2026 15:02
Added CIPP variable replacement to custom app powershell script block
This reverts commit 121a2cb.
- Introduced a new function to compare Intune policies from two sources.

feat: Add support for community repo sources in policy comparison
Replace bulk deletion of MFA methods with individual requests to improve
error handling and avoid silent failures.

Tested with removing 2 software OTP, 1 TAP, 1 QR and 1 SMS method at the
same time successfully.
- Implements KelvinTegelaar/CIPP#5552
- Add `Invoke-ListMDEOnboarding` endpoint to check MDE connector status
via Graph API
- Add `Set-CIPPDBCacheMDEOnboarding` and `Get-CIPPMDEOnboardingReport`
for ReportDB caching
- Add `MDEOnboarding` to Intune cache collection for automatic updates
Added CIPP variable replacement to custom app powershell script block
KelvinTegelaar and others added 30 commits April 3, 2026 00:12
Signed-off-by: Chris Dewey <142454021+chris-dewey-1991@users.noreply.github.com>
Signed-off-by: Chris Dewey <142454021+chris-dewey-1991@users.noreply.github.com>
Creation of Standard that controls the Quarantine Notification Settings
within Micorosft Defender.

This does the following
> Sender Display Name
> Specify Sender Address
> Disclaimer
> If there is no Language selected it will add the default (Englsh USA)
but if a Language has been manually set it will not overide this.
> Ability to tick "Use My Company Logo"

Ignores "Send End-user spam notification" as this is handled by another
standard.

<img width="650" height="659" alt="image"
src="https://github.com/user-attachments/assets/2d26f101-86de-48f4-8044-a3028aed7d82"
/>

<img width="508" height="823" alt="image"
src="https://github.com/user-attachments/assets/18f7e937-a22b-41bb-aad1-89f9af751fcc"
/>
…undant put thing so we fix not doing many graph call things
Invoke-ExecUpdateDriftDeviation only checked TemplateList.value when
resolving template settings for one-off drift remediation. For tag
bundle entries this is null, so Settings was null and the task no-oped.

Added fallback to search TemplateList-Tags.rawData.templates for the
GUID, matching how Get-CIPPStandards expands bundles.

fix(Invoke-ExecUpdateDriftDeviation): include headers in log message for scheduled drift remediation task
# Summary

Fixes DeniedRemediate one-off drift remediation silently doing nothing
for IntuneTemplate policies added via tag bundles (TemplateList-Tags).
The scheduled task would complete "successfully" but the policy was
never deployed to Intune.

# Description

`Invoke-ExecUpdateDriftDeviation` resolves the template settings for a
DeniedRemediate one-off by filtering `standardSettings.IntuneTemplate`
on `TemplateList.value`. For templates added individually this works,
but for templates added via a tag bundle (e.g. "Core Policies (4
Templates)"), `TemplateList` is null and the templates live under
`TemplateList Tags.rawData.templates` instead. The `Where-Object`
returns nothing, `$Settings` ends up null, and the scheduled task calls
`Invoke-CIPPStandardIntuneTemplate` with no settings. The function then
wildcard-matches every template in the table and processes them as a
single blob, which doesn't match anything in Graph.

The fix adds a fallback that searches
`TemplateList-Tags.rawData.templates` for the template GUID when the
`TemplateList.value` lookup returns nothing. When found, it expands the
bundle entry into a proper `TemplateList` with the individual GUID,
matching the pattern `Get-CIPPStandards` already uses for bundle
expansion during normal standards runs. Also added a warning log when
neither path finds the template.

# Testing

1. Create a drift template with a **tag bundle** containing multiple
Intune templates (e.g. "Core Policies" with Config Refresh, LAPS, etc.)
2. Assign to a test tenant and run drift. Bundled policies should show
as deviations if they don't exist in the tenant
3. Mark a bundled template deviation as "Denied" (DeniedRemediate)
4. Wait for the one-off scheduled task to complete (or force it to /w
timer run)
5. Verify the policy is actually deployed in Intune (this is the bug
fix, previously it silently did nothing)
6. Verify the policy has the correct assignments from the bundle entry
7. Also test an **individual** (non-bundled) template DeniedRemediate to
confirm no regression on the original code path
- Updated log messages to clarify when settings are already configured correctly for various standards.
- Enhanced error handling and logging for remediation processes across multiple standards.
…dGlobalQuarantineSettings.ps1

Signed-off-by: Zacgoose <107489668+Zacgoose@users.noreply.github.com>
Replace NCrontab with Cronos (add Cronos.dll, remove NCrontab.Advanced.dll) and update timer logic to use UTC and a configurable schedule timezone from a new TimeSettings entry in the Config table. Persist and validate timezone via Invoke-ExecTimeSettings (stores TimeSettings in table), surface timezone in Invoke-ExecBackendURLs, and make Get-CIPPTimerFunctions timezone-aware and Cronos-based when computing next occurrences. Add support for marking service principals as enterprise-integrated: Push-ExecAppApprovalTemplate now sets the WindowsAzureActiveDirectoryIntegratedApp tag on created or existing service principals when TemplateData.IncludeInEnterpriseAppList is set. profile.ps1 cache-clearing now wrapped in try/catch to avoid noisy failures. Overall changes improve cron parsing, timezone handling, and optional enterprise app tagging.
# Summary

Replaces all `-user $request.headers.'x-ms-client-principal'` calls with
`-Headers $Request.Headers` in `Invoke-ExecUpdateDriftDeviation` for
consistent logging behavior.

# Description

`Write-LogMessage` handles IDP detection, AAD API client resolution,
and IP address capture from `x-forwarded-for` when given the full
`-Headers` object. Passing `-user` with the raw base64 principal skips
all of that. All 9 `Write-LogMessage` calls in the file now use
`-Headers $Request.Headers` to match the convention used elsewhere.
…ng it (#1984)

Enhance logging messages to clarify the status of settings and improve
error handling during remediation processes across various standards.
This should remove some unnecessary graph calls
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.

8 participants