Powershell: Anzahl ungelesener Items auslesen ohne Impersonation
Guten Morgen zusammen,
ich hoffe, Ihr habt die Weihnachtstage gut überstanden.
Um mir die Arbeit etwas zu erleichtern, versuche ich gerade ein Powershell-Script zu erstellen, welches mir die Anzahl der ungelesenen Items in einer (Shared-)Mailbox zu der ich Zugriff habe ausgibt.
Es handelt sich dabei um ein O365-Konto.
Irgendwie scheitere ich aber jetzt schon daran über irgend ein Cmdlet die Anzahl herauszufinden. Ich finde die passende Eigenschaft einfach nicht. Das einzige was ich bei google noch gefunden habe war ein Skript welches allerdings Impersonation-Rechte verlangt und die habe ich und die anderen User, die es vielleicht einsetzen möchten nicht.
Ich habe schon mit Get-Mailbox und Get-MailboxFolder, sowie Get-MailboxStatistics rumprobiert, komme allerdings nicht weiter.
Könnt Ihr mir bitte einen Schubs in die richtige Richtung geben?
Vielen Dank und beste Grüße
ich hoffe, Ihr habt die Weihnachtstage gut überstanden.
Um mir die Arbeit etwas zu erleichtern, versuche ich gerade ein Powershell-Script zu erstellen, welches mir die Anzahl der ungelesenen Items in einer (Shared-)Mailbox zu der ich Zugriff habe ausgibt.
Es handelt sich dabei um ein O365-Konto.
Irgendwie scheitere ich aber jetzt schon daran über irgend ein Cmdlet die Anzahl herauszufinden. Ich finde die passende Eigenschaft einfach nicht. Das einzige was ich bei google noch gefunden habe war ein Skript welches allerdings Impersonation-Rechte verlangt und die habe ich und die anderen User, die es vielleicht einsetzen möchten nicht.
Ich habe schon mit Get-Mailbox und Get-MailboxFolder, sowie Get-MailboxStatistics rumprobiert, komme allerdings nicht weiter.
Könnt Ihr mir bitte einen Schubs in die richtige Richtung geben?
Vielen Dank und beste Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 529886
Url: https://administrator.de/contentid/529886
Ausgedruckt am: 21.11.2024 um 17:11 Uhr
3 Kommentare
Neuester Kommentar
EWS (Exchange Web Services) ist dein Stichwort, und die Eigenschaft heißt UnreadCount
https://www.msxfaq.de/code/ews.htm
Oder Search-Mailbox mit Query isread:false
https://docs.microsoft.com/de-de/powershell/module/exchange/mailboxes/se ...
https://www.msxfaq.de/code/ews.htm
Oder Search-Mailbox mit Query isread:false
https://docs.microsoft.com/de-de/powershell/module/exchange/mailboxes/se ...
Servus Birdy,
nicht erschrecken, der Großteil ist nur für eine Funktion zum Nachladen der benötigten EWS DLL in den Skriptordner, habe ich nur ergänzt damit man es ohne Umwege sofort ausprobieren kann.
Mail-Adresse im Kopf des Skripts noch anpassen.
Das Skript gibt hier im Beispiel nur die Anzahl der ungelesenen Nachrichten der Inbox wieder.
Im Beispiel gibst du die Credentials manuell an, kann man aber auch die Default-Credentials mit denen das Skript ausgeführt wird nehmen. Entsprechende Codestelle sollte selbsterklärend sein.
Viel Spaß damit.
Wünsche dir schon mal ein gutes neues Jahr.
Grüße Uwe
nicht erschrecken, der Großteil ist nur für eine Funktion zum Nachladen der benötigten EWS DLL in den Skriptordner, habe ich nur ergänzt damit man es ohne Umwege sofort ausprobieren kann.
Mail-Adresse im Kopf des Skripts noch anpassen.
Das Skript gibt hier im Beispiel nur die Anzahl der ungelesenen Nachrichten der Inbox wieder.
Im Beispiel gibst du die Credentials manuell an, kann man aber auch die Default-Credentials mit denen das Skript ausgeführt wird nehmen. Entsprechende Codestelle sollte selbsterklärend sein.
# Mailbox Mail-Adresse
$mailbox = 'shared@domain.tld'
# credentials abfragen
$creds = Get-Credential -Message "Bitte Zugangsdaten eingeben die über ausreichend Berechtigungen auf die Mailbox verfügen:"
if ($PSVersionTable.PSVersion.Major -lt 3){write-host "ERROR: Minimum Powershell Version 3.0 is required!" -F Yellow; return}
# Funktion zum Laden des EWS Assemblies
function Load-EWSLibrary {
$localpath = "$PSScriptRoot\Microsoft.Exchange.WebServices.dll"
if(!(Test-Path $localpath )){
Add-Type -A System.IO.Compression.FileSystem
$tmp = "$env:TEMP\$([IO.Path]::GetRandomFileName())"
write-host "Downloading and extracting required 'Microsoft.Exchange.WebServices.dll' ... " -F Green -NoNewline
try{
(New-Object System.Net.WebClient).DownloadFile('https://www.nuget.org/api/v2/package/Exchange.WebServices.Managed.Api/2.2.1.2', $tmp)
$zip = [System.IO.Compression.ZipFile]::OpenRead($tmp)
$zip.Entries | ?{$_.Fullname -eq 'lib/net35/Microsoft.Exchange.WebServices.dll'} | %{
[System.IO.Compression.ZipFileExtensions]::ExtractToFile($_,$localpath)
}
write-host "OK" -F Green
}catch{
throw "Error downloading required EWS Library / Error: $($_.Exception.Message)"
}finally{
if ($zip){$zip.Dispose()}
del $tmp -Force -EA SilentlyContinue
}
}
Add-Type -Path $localpath
}
# EWS Assembly laden
Load-EWSLibrary
# EWS Service-Object erstellen
$ews = new-object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010)
$ews.AutodiscoverUrl($mailbox)
$ews.UseDefaultCredentials = $false
$ews.Credentials = $creds.GetNetworkCredential()
# Inbox id der Sharedmailbox ermitteln
$inbox = New-Object Microsoft.Exchange.WebServices.Data.FolderId ([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox),$mailbox
# ungelesene items der Inbox ermitteln
$unreadcount = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($ews,$inbox).UnreadCount
# und das ganze ausgeben
write-host "Inbox unread items: $unreadcount"
Wünsche dir schon mal ein gutes neues Jahr.
Grüße Uwe