Exchange online Powershell - Statistik ausgeben, wie viele Kalendereinträge ein User nach dem heutigen Tag hat
Hallo zusammen,
ich hoffe die Frage gibt es nicht bereits.
Wir haben einen Exchange online und ich hab natürlich die Adminrechte.
Problem:
Wir möchten gerne eine Abfrage per Powershell machen für alle vorhandenen User.
Es soll ausgegeben werden, wie viele Kalendereinträge ein User innerhalb der nächsten 4 Wochen hat. Es soll also eine Anzahl herauskommen, aber am Besten auch noch ohne Serientermine (wenn das geht).
Ich habe leider nicht viel Ahnung davon.
Weiß nur wie ich mich mit dem Exchange online per Powershell verbinden kann.
Hab auch eine Abfrage ergoogelt, die auswirft wie viele sichtbare Elemente ein User im Posteingang hat und wie ich eine csv einlese, in der eben alle Usernamen stehen für den Parameter "-Identity".
Aber mehr weiß ich leider wirklich nicht.
Ich hoffe ihr könnt mir dabei helfen!
Vielen Dank im Voraus und schöne Grüße!
Fabian
ich hoffe die Frage gibt es nicht bereits.
Wir haben einen Exchange online und ich hab natürlich die Adminrechte.
Problem:
Wir möchten gerne eine Abfrage per Powershell machen für alle vorhandenen User.
Es soll ausgegeben werden, wie viele Kalendereinträge ein User innerhalb der nächsten 4 Wochen hat. Es soll also eine Anzahl herauskommen, aber am Besten auch noch ohne Serientermine (wenn das geht).
Ich habe leider nicht viel Ahnung davon.
Weiß nur wie ich mich mit dem Exchange online per Powershell verbinden kann.
Hab auch eine Abfrage ergoogelt, die auswirft wie viele sichtbare Elemente ein User im Posteingang hat und wie ich eine csv einlese, in der eben alle Usernamen stehen für den Parameter "-Identity".
Aber mehr weiß ich leider wirklich nicht.
Ich hoffe ihr könnt mir dabei helfen!
Vielen Dank im Voraus und schöne Grüße!
Fabian
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 553742
Url: https://administrator.de/forum/exchange-online-powershell-statistik-ausgeben-wie-viele-kalendereintraege-ein-user-nach-dem-heutigen-tag-hat-553742.html
Ausgedruckt am: 17.04.2025 um 10:04 Uhr
7 Kommentare
Neuester Kommentar
Ich finde eurer Vorhaben gar nicht gut, vorallem aus der Sicht der Mitarbeiter.
Allen etwas aufzuerlegen, anstatt sie das selbst machen zulassen, ist jetzt nicht die feine Art der Führung.
Ich hätte sofort meine Kündigung eingereicht, wenn mir bekannt wäre, dass jemand meine Nutzung des Kalenders trackt.
Deshalb biete ich keine weitere Hilfe an, sorry.
Allen etwas aufzuerlegen, anstatt sie das selbst machen zulassen, ist jetzt nicht die feine Art der Führung.
Ich hätte sofort meine Kündigung eingereicht, wenn mir bekannt wäre, dass jemand meine Nutzung des Kalenders trackt.
Deshalb biete ich keine weitere Hilfe an, sorry.
Servus Fabian, willkommen auf Administrator.de!
Mit etwas EWS ist das auch kein Problem.
Variablen im Kopf anpassen und Hinweise auch zur Formatierung der CSV mit den Usern beachten.
(Achtung für die Abfrage fremder Mailboxen sind Impersonation-Rechte für den Account erforderlich der das Skript ausführt! Falls das für dich bömische Dörfer sein sollten, beliest du dich hier.) p.s. Und immer schön die DSGVO beachten
!
Ausgabe erfolgt dann in eine CSV nach folgendem Schema
Viel Spaß
Grüße Uwe
p.s. Persönliche Anpassungen => PN
Mit etwas EWS ist das auch kein Problem.
Variablen im Kopf anpassen und Hinweise auch zur Formatierung der CSV mit den Usern beachten.
(Achtung für die Abfrage fremder Mailboxen sind Impersonation-Rechte für den Account erforderlich der das Skript ausführt! Falls das für dich bömische Dörfer sein sollten, beliest du dich hier.) p.s. Und immer schön die DSGVO beachten
<#
@colinardo (Administrator.de)
Anzahl Kalendereinträge (ohne Serientermine) von Usern in einem bestimmtem Zeitraum abfragen und in CSV exportieren
(Achtung, arbeitet mit Impersonation da fremde Mailboxen abgefragt werden! User der die Abfrage durchführt muss in diesem Fall über Impersonation Berechtigungen verfügen um fremde Mailboxen abfragen zu können)
#>
# == Variablen ===========================
# Von Datum
$startDate = (get-date).Date
# bis Datum
$endDate = $startDate.AddMonths(1)
# CSV Ausgabedatei
$csvexport = "$psscriptroot\export.csv"
# Pfad zur CSV der Benutzer
# Sollte so organisiert sein
<#
"Mail"
"userA@domain.tld"
"userB@domain.tld"
"userC@domain.tld"
#>
$csvusers = "$psscriptroot\users.csv"
# =========================================
# Funktion zum Laden des EWS Assemblies
function Load-EWSLibrary {
if ($psscriptroot -eq ''){
$localpath = Join-Path $env:TEMP "Microsoft.Exchange.WebServices.dll"
}else{
$localpath = Join-Path $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 DLL laden
Load-EWSLibrary
# EWS Objekt erstellen
$service = new-object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010)
# view mit Start und Enddatum erstellen
$view = New-Object Microsoft.Exchange.WebServices.Data.CalendarView $startDate, $endDate
# csv mit den Usern importieren
$users = Import-CSV $csvusers -Delimiter ";"
$meetingdata = foreach($user in $users){
$service.AutoDiscoverUrl($user.Mail)
$service.ImpersonatedUserId = New-Object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId ([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress, $user.Mail)
# items suchen
$result = $service.FindAppointments([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Calendar,$view)
# Anzahl an Items im Kalender auflisten
[pscustomobject]@{User = $user.Mail;Count = ($result.items | ?{$_.IsRecurring -eq $false}).Count}
}
# daten in csv exportieren
$meetingdata | export-csv $csvexport -Delimiter ";" -NoType -Encoding UTF8
# csv öffnen
start $csvexport
Ausgabe erfolgt dann in eine CSV nach folgendem Schema
"User";"Count"
"userA@domain.tld";"3"
"userB@domain.tld";"0"
Grüße Uwe
p.s. Persönliche Anpassungen => PN
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen, und Lösungen markieren nicht vergessen. Merci.