Nebula.Core.psd1

@{
    RootModule           = 'Nebula.Core.psm1'
    ModuleVersion        = '1.2.0'
    GUID                 = '07acc3c0-14dc-4c1d-a1d0-6140e83c2a41'
    Author               = 'Giovanni Solone'
    Description          = 'A PowerShell module that go beyond your workstations. It will make your Microsoft 365 life easier!'

    # Minimum required PowerShell (PS 5.1 works; better with PS 7+)
    PowerShellVersion    = '5.1'
    CompatiblePSEditions = @('Desktop', 'Core')
    RequiredAssemblies   = @()
    FunctionsToExport    = @(
        'Add-EntraGroupDevice',
        'Add-EntraGroupUser',
        'Add-MboxAlias',
        'Add-MboxPermission',
        'Add-UserMsolAccountSku',
        'Connect-EOL',
        'Connect-Nebula',
        'Copy-OoOMessage',
        'Copy-UserMsolAccountSku',
        'Disable-UserDevices',
        'Disable-UserSignIn',
        'Disconnect-Nebula',
        'Export-CalendarPermission',
        'Export-DistributionGroups',
        'Export-DynamicDistributionGroups',
        'Export-M365Group',
        'Export-MboxAlias',
        'Export-MboxPermission',
        'Export-MboxStatistics',
        'Export-MsolAccountSku',
        'Export-QuarantineEml',
        'Format-MessageIDsFromClipboard',
        'Format-SortedEmailsFromClipboard',
        'Get-DynamicDistributionGroupFilter',
        'Get-EntraGroupDevice',
        'Get-EntraGroupMembers',
        'Get-EntraGroupUser',
        'Get-MboxAlias',
        'Get-MboxLastMessageTrace',
        'Get-MboxPermission',
        'Get-MboxPrimarySmtpAddress',
        'Get-MboxStatistics',
        'Get-NebulaConfig',
        'Get-NebulaConnections',
        'Get-NebulaModuleUpdates',
        'Get-QuarantineFrom',
        'Get-QuarantineFromDomain',
        'Get-QuarantineToRelease',
        'Get-RoleGroupsMembers',
        'Get-RoomDetails',
        'Get-TenantMsolAccountSku',
        'Get-UserGroups',
        'Get-UserLastSeen',
        'Get-UserMsolAccountSku',
        'Set-MboxMrmCleanup',
        'Move-UserMsolAccountSku',
        'New-SharedMailbox',
        'Search-MboxCutoffWindow',
        'Remove-EntraGroupDevice',
        'Remove-EntraGroupUser',
        'Remove-MboxAlias',
        'Remove-MboxPermission',
        'Remove-UserMsolAccountSku',
        'Revoke-UserSessions',
        'Search-EntraGroup',
        'Set-MboxLanguage',
        'Set-MboxRulesQuota',
        'Set-OoO',
        'Set-SharedMboxCopyForSent',
        'Sync-NebulaConfig',
        'Test-SharedMailboxCompliance',
        'Unlock-QuarantineFrom',
        'Unlock-QuarantineMessageId',
        'Update-LicenseCatalog',
        'Update-NebulaConnections'
    )
    CmdletsToExport      = @()
    VariablesToExport    = @()
    AliasesToExport      = @(
        'Export-DDG',
        'Export-DG',
        'fse',
        'Get-DDGRecipientFilter',
        'gpa',
        'Leave-Nebula',
        'mids',
        'qrel',
        'rqf'
    )

    PrivateData          = @{
        PSData = @{
            Tags         = @(
                'Administration',
                'Automation',
                'Calendar',
                'Configuration',
                'Entra', 
                'Exchange', 
                'Exchange-Online',
                'Groups', 
                'Licenses', 
                'M365', 
                'Mailboxes', 
                'Microsoft', 
                'Microsoft-365', 
                'Microsoft-Graph',
                'Office-365', 
                'PowerShell', 
                'Quarantine', 
                'Reporting',
                'Rooms',
                'Security'
            )
            ProjectUri   = 'https://github.com/gioxx/Nebula.Core'
            LicenseUri   = 'https://opensource.org/licenses/MIT'
            IconUri      = 'https://raw.githubusercontent.com/gioxx/Nebula.Core/main/Assets/icon.png'
ReleaseNotes = @'
- Change: Add-MboxPermission now prints confirmation messages by default; use -PassThru for detailed output objects.
- Change: Get-MboxPrimarySmtpAddress (`gpa`) now returns a compact default view (`DisplayName`, `PrimarySmtpAddress`); use `-Detailed` for full recipient fields.
- Change: Get-UserGroups now returns `GroupName` and `GroupMail` property names (instead of spaced names) for easier scripting and filtering.
- Change: Remove-MboxPermission now uses -ClearAll (renamed from -RemoveAllAdditionalPermissions).
- Fix: Add-UserMsolAccountSku now accepts positional and pipeline UPN input (`<UserPrincipalName> -License ...` and `'u1','u2' | Add-UserMsolAccountSku -License ...`).
- Fix: Add-UserMsolAccountSku now reports only actually assignable licenses in confirmation/success messages and explicitly reports skipped SKUs with zero availability.
- Fix: Get-MboxStatistics now processes all mailbox identities received via pipeline (not only the last one).
- Fix: Remove-MboxAlias now validates post-update proxy addresses to avoid false "removed" messages when an alias is protected (for example, WindowsLiveId).
- Fix: Remove-MboxPermission now supports positional calls (`Remove-MboxPermission <SourceMailbox> <UserMailbox>`).
- Fix: Remove-UserMsolAccountSku now accepts positional and pipeline UPN input (`<UserPrincipalName> -License ...` and `'u1','u2' | Remove-UserMsolAccountSku -License ...`).
- Fix: User recipient resolve now supports short identifiers in license cmdlets by adding Graph fallback lookup on alias/SamAccountName/display name/UPN prefix.
- Improve: Get-EntraGroupMembers can resolve registered owners/users for device members via -IncludeDeviceUsers.
- Improve: Get-EntraGroupMembers reports device owners/users in a single column when resolved.
- Improve: Get-MboxStatistics now always includes `ArchiveEnabled` to quickly show whether an archive exists.
- Improve: Get-NebulaModuleUpdates now also checks ExchangeOnlineManagement and Microsoft.Graph meta modules.
- Improve: Get-TenantMsolAccountSku now reports Available net of suspended seats and shows Total with enabled/suspended breakdown.
- Improve: Get-UserMsolAccountSku can show tenant availability for assigned SKUs via -CheckAvailability.
- Improve: Remove-EntraGroupDevice/Remove-EntraGroupUser can clear all group members via -ClearAll (with stronger confirmation).
- Improve: User identifier resolution via `Find-UserRecipient` is now applied consistently across `Get/Add/Remove-EntraGroupUser` and `Disable-UserDevices`/`Disable-UserSignIn`/`Revoke-UserSessions`, including short identifiers.
- Improve: User license cmdlets (`Add/Get/Remove/Copy/Move-UserMsolAccountSku`) now use a more consistent parameter style (positional UPNs where applicable, plus pipeline input on single-user cmdlets).
- New: Get-EntraGroupMembers lists all members of an Entra group (users, devices, ...).
- New: Get-MboxStatistics returns a simplified mailbox statistics view.
- New: Get-NebulaModuleUpdates runs an on-demand update check for Nebula.* modules.
- New: Get-TenantMsolAccountSku adds TotalCount with the numeric total for scripting.
- New: Search-EntraGroup searches Entra groups by display name or description.
- New: Search-MboxCutoffWindow creates/reuses Purview Compliance Searches to isolate mailbox discard sets (estimate + optional preview) before export/cleanup workflows.
- New: Set-MboxMrmCleanup applies a temporary MRM cleanup policy/tag to a mailbox, with optional Managed Folder Assistant trigger using -RunAssistant.
- New: Update checks during Connect-Nebula can be throttled via CheckUpdatesIntervalHours.
- New: Update-NebulaConnections adds an explicit refresh entry point for connection status checks.
'@

        }
    }
}