Ogranicza dostęp mobilny do Exchange Online — zezwala tylko Outlook Mobile.
✉️ Exchange Online POWERSHELL ChrisTitusTechOgranicza dostęp mobilny do Exchange Online — zezwala tylko Outlook Mobile.
Opis
Nowoczesna wersja Restrict-ExchangeOnlineMobileAccess.ps1 (2015). MIGRACJA — co zostało zmienione: STARE (deprecated): New-PSSession -ConnectionUri outlook.office365.com/powershell-liveid → Basic Auth, EOL 2021 Import-PSSession → Implicit Remoting, deprecated Set-CasMailbox -OWAforDevicesEnabled $False → właściwość usunięta z EXO v3 NOWE (2026): Connect-ExchangeOnline → Nowoczesne połączenie (OAuth2, MFA-ready) Set-MobileDeviceMailboxPolicy → Polityka urządzeń mobilnych (tenant-wide) New-MobileDeviceAccessRule → Reguła dostępu per model urządzenia Set-MobileDeviceAccessRule → Edycja istniejącej reguły Strategia: 1. Tworzy/aktualizuje politykę mobilną blokującą wszystkie urządzenia (DefaultAccessLevel = Block) 2. Dodaje regułę Allow dla "Outlook for iOS and Android" 3. Przypisuje politykę do wszystkich skrzynek (lub wybranych)
#Requires -Modules ExchangeOnlineManagement
#Requires -Version 7.0
<#
.SYNOPSIS
Ogranicza dostęp mobilny do Exchange Online — zezwala tylko Outlook Mobile.
.DESCRIPTION
Nowoczesna wersja Restrict-ExchangeOnlineMobileAccess.ps1 (2015).
MIGRACJA — co zostało zmienione:
STARE (deprecated):
New-PSSession -ConnectionUri outlook.office365.com/powershell-liveid → Basic Auth, EOL 2021
Import-PSSession → Implicit Remoting, deprecated
Set-CasMailbox -OWAforDevicesEnabled $False → właściwość usunięta z EXO v3
NOWE (2026):
Connect-ExchangeOnline → Nowoczesne połączenie (OAuth2, MFA-ready)
Set-MobileDeviceMailboxPolicy → Polityka urządzeń mobilnych (tenant-wide)
New-MobileDeviceAccessRule → Reguła dostępu per model urządzenia
Set-MobileDeviceAccessRule → Edycja istniejącej reguły
Strategia:
1. Tworzy/aktualizuje politykę mobilną blokującą wszystkie urządzenia (DefaultAccessLevel = Block)
2. Dodaje regułę Allow dla "Outlook for iOS and Android"
3. Przypisuje politykę do wszystkich skrzynek (lub wybranych)
.PARAMETER TenantDomain
Domena tenanta M365 (np. firma.onmicrosoft.com). Używana do Connect-ExchangeOnline.
.PARAMETER PolicyName
Nazwa polityki urządzeń mobilnych (domyślnie: "BlockAllExceptOutlook").
.PARAMETER TargetMailbox
UPN konkretnej skrzynki — jeśli podane, stosuje tylko do tej skrzynki.
Bez parametru — stosuje do wszystkich skrzynek (ConfirmImpact=High).
.EXAMPLE
.\Restrict-EXOMobileAccess-Modern.ps1 -TenantDomain "firma.onmicrosoft.com"
.EXAMPLE
.\Restrict-EXOMobileAccess-Modern.ps1 -TenantDomain "firma.onmicrosoft.com" -TargetMailbox "jan@firma.pl" -WhatIf
.NOTES
Wersja: 2.0.0 (2026)
Wymaga: ExchangeOnlineManagement v3+ — Install-Module ExchangeOnlineManagement -Scope CurrentUser
Uprawnienia: Exchange Administrator lub Recipient Management
#>
[CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'High')]
param(
[Parameter(Mandatory)]
[string]$TenantDomain,
[string]$PolicyName = "BlockAllExceptOutlook",
[string]$TargetMailbox = ""
)
# ============================================================
# POŁĄCZENIE — EXO v3 (zastępuje New-PSSession + Import-PSSession)
# ============================================================
Write-Host "Łączenie z Exchange Online..." -ForegroundColor Cyan
Connect-ExchangeOnline -Organization $TenantDomain -ShowBanner:$false -ErrorAction Stop
Write-Verbose "Połączono z Exchange Online ($TenantDomain)"
try {
# ============================================================
# KROK 1: Polityka urządzeń mobilnych (tenant-wide block)
# Zastępuje: Set-ActiveSyncOrganizationSettings -DefaultAccessLevel Block
# ============================================================
Write-Host "`n[1/3] Konfiguracja polityki mobilnej '$PolicyName'..." -ForegroundColor Cyan
$existingPolicy = Get-MobileDeviceMailboxPolicy -Identity $PolicyName -ErrorAction SilentlyContinue
if ($existingPolicy) {
Write-Host " Polityka istnieje — aktualizuję..."
if ($PSCmdlet.ShouldProcess($PolicyName, "Aktualizacja polityki mobilnej (AllowNonProvisionableDevices=False)")) {
Set-MobileDeviceMailboxPolicy -Identity $PolicyName `
-AllowNonProvisionableDevices $false `
-DeviceEncryptionEnabled $true `
-RequireDeviceEncryption $true `
-ErrorAction Stop
Write-Host " ✓ Polityka zaktualizowana" -ForegroundColor Green
}
} else {
Write-Host " Tworzę nową politykę..."
if ($PSCmdlet.ShouldProcess($PolicyName, "Tworzenie polityki mobilnej")) {
New-MobileDeviceMailboxPolicy -Name $PolicyName `
-AllowNonProvisionableDevices $false `
-DeviceEncryptionEnabled $true `
-RequireDeviceEncryption $true `
-IsDefault $false `
-ErrorAction Stop
Write-Host " ✓ Polityka utworzona" -ForegroundColor Green
}
}
# ============================================================
# KROK 2: Reguła dostępu — Allow dla Outlook Mobile
# Zastępuje: New-ActiveSyncDeviceAccessRule (ActiveSync = stara nazwa API)
# ============================================================
Write-Host "`n[2/3] Konfiguracja reguły dostępu dla Outlook Mobile..." -ForegroundColor Cyan
$ruleName = "Allow-OutlookMobile"
$existingRule = Get-MobileDeviceAccessRule -Identity $ruleName -ErrorAction SilentlyContinue
if ($existingRule) {
Write-Host " Reguła '$ruleName' już istnieje (AccessLevel: $($existingRule.AccessLevel))"
if ($existingRule.AccessLevel -ne "Allow") {
if ($PSCmdlet.ShouldProcess($ruleName, "Zmiana AccessLevel na Allow")) {
Set-MobileDeviceAccessRule -Identity $ruleName -AccessLevel Allow -ErrorAction Stop
Write-Host " ✓ Reguła zaktualizowana do Allow" -ForegroundColor Green
}
} else {
Write-Host " ✓ Reguła już poprawnie skonfigurowana" -ForegroundColor Green
}
} else {
if ($PSCmdlet.ShouldProcess($ruleName, "Tworzenie reguły Allow dla Outlook Mobile")) {
New-MobileDeviceAccessRule `
-Characteristic DeviceModel `
-QueryString "Outlook for iOS and Android" `
-AccessLevel Allow `
-Name $ruleName `
-ErrorAction Stop
Write-Host " ✓ Reguła Allow dla 'Outlook for iOS and Android' utworzona" -ForegroundColor Green
}
}
# ============================================================
# KROK 3: Ustawienie globalnego bloku dostępu mobilnego
# (tenant-wide — blokuje wszystkie urządzenia niespełniające reguł)
# ============================================================
Write-Host "`n[3/3] Ustawienie globalnej polityki blokady ActiveSync..." -ForegroundColor Cyan
$orgSettings = Get-MobileDeviceAccessRule -ErrorAction SilentlyContinue
$currentOrgBlock = Get-OrganizationConfig | Select-Object -ExpandProperty DefaultMobileDeviceAccessLevel -ErrorAction SilentlyContinue
# Sprawdź aktualny stan ustawień organizacji ActiveSync
$asOrgSettings = Get-ActiveSyncOrganizationSettings -ErrorAction SilentlyContinue
if ($asOrgSettings -and $asOrgSettings.DefaultAccessLevel -ne "Block") {
if ($PSCmdlet.ShouldProcess("ActiveSyncOrganizationSettings", "Ustawienie DefaultAccessLevel = Block")) {
Set-ActiveSyncOrganizationSettings -DefaultAccessLevel Block -WarningAction SilentlyContinue
Write-Host " ✓ Globalny blok ActiveSync ustawiony" -ForegroundColor Green
}
} else {
Write-Host " ✓ Globalny blok ActiveSync już aktywny" -ForegroundColor Green
}
# ============================================================
# PRZYPISANIE POLITYKI (opcjonalne — do konkretnej skrzynki lub wszystkich)
# ============================================================
if ($TargetMailbox) {
Write-Host "`nPrzypisywanie polityki do: $TargetMailbox" -ForegroundColor Cyan
if ($PSCmdlet.ShouldProcess($TargetMailbox, "Przypisz MobileDeviceMailboxPolicy: $PolicyName")) {
Set-CASMailbox -Identity $TargetMailbox `
-ActiveSyncMailboxPolicy $PolicyName `
-ErrorAction Stop
Write-Host " ✓ Polityka przypisana do $TargetMailbox" -ForegroundColor Green
}
} else {
Write-Host "`n[Opcjonalnie] Przypisanie polityki do WSZYSTKICH skrzynek..." -ForegroundColor Yellow
Write-Host " Uruchom ręcznie (duże środowiska — może trwać długo):"
Write-Host " Get-EXOMailbox -ResultSize Unlimited | Set-CASMailbox -ActiveSyncMailboxPolicy '$PolicyName'" -ForegroundColor Gray
}
# ============================================================
# PODSUMOWANIE
# ============================================================
Write-Host "`n=== PODSUMOWANIE ===" -ForegroundColor Cyan
Write-Host "✓ Polityka mobilna: $PolicyName" -ForegroundColor Green
Write-Host "✓ Reguła Allow: Outlook for iOS and Android" -ForegroundColor Green
Write-Host "✓ Globalny blok: ActiveSync DefaultAccessLevel = Block" -ForegroundColor Green
Write-Host ""
Write-Host "Weryfikacja:" -ForegroundColor Yellow
Write-Host " Get-MobileDeviceMailboxPolicy | Format-Table Name,AllowNonProvisionableDevices"
Write-Host " Get-MobileDeviceAccessRule | Format-Table Name,Characteristic,QueryString,AccessLevel"
} finally {
Disconnect-ExchangeOnline -Confirm:$false
Write-Verbose "Rozłączono z Exchange Online."
}