365TUNE.psd1

@{
    ModuleVersion     = "2.3.5"
    GUID              = "7c9c4650-e980-44ca-8092-50e0ae0ec9bc"
    Author            = "Metawise Consulting LLC"
    CompanyName       = "Metawise Consulting LLC"
    Copyright         = "(c) 2025 Metawise Consulting LLC. All rights reserved."
    Description       = "365TUNE PowerShell toolkit for Microsoft 365 license optimization, security compliance, cost reporting, and Azure permissions management."
    RootModule        = "365TUNE.psm1"
    FunctionsToExport = @(
        "Invoke-365TUNEConnectAll",
        "Invoke-365TUNERevokeAll",
        "Invoke-365TuneConnectAzure",
        "Invoke-365TuneRevokeAzure",
        "Invoke-365TuneConnectExchange",
        "Invoke-365TuneRevokeExchange",
        "Invoke-365TuneConnectTeams",
        "Invoke-365TuneRevokeTeams",
        "Invoke-365TuneTestAzure",
        "Invoke-365TuneTestExchange",
        "Invoke-365TuneTestTeams",
        "Invoke-365TUNETestAll"
    )
    CmdletsToExport   = @()
    AliasesToExport   = @()
    VariablesToExport = @()
    PrivateData       = @{
        PSData = @{
            Tags         = @("Azure","Microsoft365","M365","MSP","Licensing","Security","Compliance","CIS","Entra","GDAP","ExchangeOnline","365TUNE")
            ProjectUri   = "https://365tune.com"
            LicenseUri   = "https://365tune.com/Gallerylicense"
            ReleaseNotes = @"
v2.3.5 (bug fix release)
- Fixed Cloud Shell authentication: all functions now authenticate as the signed-in user
  instead of the VM Managed Identity (MSI). MSI has no Graph API or Exchange Admin
  permissions, causing all Cloud Shell runs to fail silently or throw.
- Fixed 5 misplaced backtick line-continuations in ConnectExchange, ConnectTeams,
  RevokeTeams that broke command parsing and caused ParameterBindingExceptions.
- Fixed -TimeoutSec and -ErrorAction Stop being bound to Where-Object instead of
  Invoke-RestMethod in ConnectAzure and RevokeAzure (6 occurrences).
- Fixed -ErrorAction Stop applied to Out-Null instead of Invoke-RestMethod in
  ConnectExchange and ConnectTeams, causing silent swallowing of HTTP errors.
- Fixed RevokeAzure: REST queries between elevation and try/finally block were
  unprotected - if they threw, User Access Administrator elevation was never removed.
  All post-elevation code is now inside a single try/finally block.
- Updated ConnectExchange and RevokeExchange .DESCRIPTION: now supported in Cloud Shell.
"@

        }
    }
}