Benutzer-Werkzeuge

Webseiten-Werkzeuge


microsoft_exchange

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
microsoft_exchange [2026/01/14 14:08]
jango [Public Folder]
microsoft_exchange [2026/01/15 12:17] (aktuell)
jango [Public Folder]
Zeile 384: Zeile 384:
 # alle public folder # alle public folder
 Get-PublicFolder -Recurse -ResultSize Unlimited Get-PublicFolder -Recurse -ResultSize Unlimited
 +
 +# Nur Top-Level
 +Get-PublicFolder -ResultSize Unlimited -Recurse | select Name,ParentPath | where-object { $_.ParentPath -eq "\" }
 +
 +Add-PublicFolderClientPermission -Identity \My-Folder -User test.user -AccessRights Editor|Owner|Publisher
 +Get-PublicFolderClientPermission -Identity \My-Folder
 +Remove-PublicFolderClientPermission -Identity \My-Folder -User test.user
 </code> </code>
  
Zeile 456: Zeile 463:
 IsValid                        : True IsValid                        : True
 ObjectState                    : Unchanged ObjectState                    : Unchanged
 +</code>
 +
 +===Test Script===
 +
 +<code powershell>
 +# EWS Config
 +$MailboxForAutodiscover = "manuel.zarat@akm.at"   # nur für Autodiscover
 +$UseDefaultCredentials  = $false                    # Wenn als Mailbox in Windows angemeldet
 +$EwsCred = Get-Credential                        # wenn keine DefaultCreds
 +
 +function Get-PublicFolderFolderClassEws {
 +    param([Parameter(Mandatory)][string]$PfPath)
 +
 +    # DLL laden (Standardpfad; Versionsabhängig?)
 +    $dll = "$env:ProgramFiles\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll"
 +    if (-not ("Microsoft.Exchange.WebServices.Data.ExchangeService" -as [type])) {
 +        if (-not (Test-Path $dll)) { return $null }
 +        Add-Type -Path $dll
 +    }
 +
 +    $service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService(
 +        [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2013_SP1
 +    )
 +
 +    if ($UseDefaultCredentials) {
 +        $service.UseDefaultCredentials = $true
 +    } else {
 +        $service.Credentials = New-Object Microsoft.Exchange.WebServices.Data.WebCredentials(
 +            $EwsCred.UserName, $EwsCred.GetNetworkCredential().Password
 +        )
 +    }
 +
 +    $service.AutodiscoverUrl($MailboxForAutodiscover, { $true })
 +
 +    $current = [Microsoft.Exchange.WebServices.Data.Folder]::Bind(
 +        $service, [Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::PublicFoldersRoot
 +    )
 +
 +    foreach ($seg in $PfPath.Trim("\").Split("\") | Where-Object { $_ }) {
 +        $view   = New-Object Microsoft.Exchange.WebServices.Data.FolderView(100)
 +        $filter = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo(
 +            [Microsoft.Exchange.WebServices.Data.FolderSchema]::DisplayName, $seg
 +        )
 +        $res = $service.FindFolders($current.Id, $filter, $view)
 +        if ($res.TotalCount -lt 1) { return $null }
 +        $current = $res.Folders[0]
 +    }
 +
 +    return $current.FolderClass
 +}
 +
 +function Show-Subs {
 +    param(
 +        [Parameter(Mandatory)] $ParentEntryId,
 +        [int] $Level = 1
 +    )
 +
 +    $subs = Get-PublicFolder -ResultSize Unlimited -Recurse | Where-Object { $_.ParentFolder -eq $ParentEntryId }
 +
 +    foreach ($sub in $subs) {
 +
 +        $perms = Get-PublicFolderClientPermission -Identity $sub.Identity -ErrorAction SilentlyContinue
 +        $owners = $perms | Where-Object { $_.AccessRights -contains "Owner" } | Select-Object -ExpandProperty User -ErrorAction SilentlyContinue
 +        if (-not $owners) { $owners = "<none>" }
 +        $permString = ($perms | ForEach-Object { "$($_.User):$($_.AccessRights -join ',')" }) -join '; '
 +
 +        #Write-Host ("{0}{1} => [E]{2} => [P]{3}" -f ("`t" * $Level), $sub.Name, $sub.EntryId, $sub.ParentFolder)
 +        Write-Host ("{0}{1}" -f ("`t" * $Level), $sub.Name)
 +        Write-Host ("{0}- EntryId: {1}" -f ("`t" * $Level), $sub.EntryId)
 +        Write-Host ("{0}- ParentFolder: {1}" -f ("`t" * $Level), $sub.ParentFolder)
 +
 +        Write-Host ("{0}- Owner(s): {1}" -f ("`t" * ($Level + 1)), ($owners -join ', '))
 +        Write-Host ("{0}- Permissions: {1}" -f ("`t" * ($Level + 1)), $permString)
 +
 + $addr = Get-MailPublicFolder -Identity $sub.Identity -ErrorAction SilentlyContinue
 + if ($addr -and $addr.PrimarySmtpAddress) {
 + Write-Host ("{0}- Address: {1}" -f ("`t" * ($Level + 1)), $addr.PrimarySmtpAddress)
 + } else {
 + Write-Host ("{0}- Address: ---" -f ("`t" * ($Level + 1)))
 + }
 +
 + $type = Get-PublicFolderFolderClassEws -PfPath $sub.Identity
 + if (-not $type) { $type = "<unknown>" }
 + Write-Host ("{0}- Type: {1}" -f ("`t" * ($Level + 1)), $type)
 +
 +        Show-Subs -ParentEntryId $sub.EntryId -Level ($Level + 1)
 +
 +    }
 +}
 +
 +Get-PublicFolder -ResultSize Unlimited -Recurse | Where-Object { $_.ParentPath -eq "\" } | Select-Object Name, EntryId, ParentFolder, Identity | ForEach-Object {
 +    
 + $curr = $_
 +    
 + $perms = Get-PublicFolderClientPermission -Identity $curr.Identity -ErrorAction SilentlyContinue
 +    $owners = $perms | Where-Object { $_.AccessRights -contains "Owner" } | Select-Object -ExpandProperty User -ErrorAction SilentlyContinue
 +    if (-not $owners) { $owners = "<none>" }
 +    $permString = ($perms | ForEach-Object { "$($_.User):$($_.AccessRights -join ',')" }) -join '; '
 +
 +    #Write-Host "$($curr.Name) => [E]$($curr.EntryId) => [P]$($curr.ParentFolder)"
 +    Write-Host "$($curr.Name)"
 +    Write-Host "`t- EntryId: $($curr.EntryId)"
 +    Write-Host "`t- ParentFolder: $($curr.ParentFolder)"
 +    Write-Host ("`t- Owner(s): {0}" -f ($owners -join ', '))
 +    Write-Host ("`t- Permissions: {0}" -f $permString)
 +
 + try {
 + $addr = Get-MailPublicFolder -Identity $curr.Identity -ErrorAction SilentlyContinue
 + if ($addr -and $addr.PrimarySmtpAddress) {
 + Write-Host ("`t- Address: {0}" -f ($addr.PrimarySmtpAddress))
 + } else {
 + Write-Host ("`t- Address: ---")
 + }
 + } catch {}
 +
 + $type = Get-PublicFolderFolderClassEws -PfPath $curr.Identity
 + if (-not $type) { $type = "<unknown>" }
 + Write-Host ("`t- Type: {0}" -f $type)
 +
 +    Show-Subs -ParentEntryId $curr.EntryId -Level 1
 +
 +}
 </code> </code>
 ====Mail enabled==== ====Mail enabled====
microsoft_exchange.1768396116.txt.gz · Zuletzt geändert: 2026/01/14 14:08 von jango