Powershell: Nutzer in CSV Exportieren, wenn er vor einem bestimmten Datum eingeloggt hat
Hallo Zusammen
Ich bin gerade dabei ein kurzes Script zu schreiben, dass alle Nutzer aus exchange online exportieren soll, die vor einem bestimmten Datum sich eingeloggt haben. Hier ist das besagte Script:
Die Exportierung funktioniert, aber der Datumsvergleich leider nicht. Er exportiert einfach immer alle Nutzer, egal was ich angebe.Meine Vermutung liegt darin, dass ich das Datum von $Userdata zuerst in das DateTime Format umwandeln muss, da bin ich mir aber auch nicht ganz sicher...
Wo genau liegt hier der Fehler?
Besten Dank für eure Hilfe.
Gruss,
gabe
Ich bin gerade dabei ein kurzes Script zu schreiben, dass alle Nutzer aus exchange online exportieren soll, die vor einem bestimmten Datum sich eingeloggt haben. Hier ist das besagte Script:
#Date
[datetime]$LastDate = Read-Host "Enter the date for reference (dd/mm/yyyy hh:mm)"
$Userdata = (Get-Mailbox) | Foreach {Get-MailboxStatistics $_.Identity | Select DisplayName, LastLogonTime
Write-Host $_.Identity "Has been checked."
#Write user to CSV-File, if the user hasn't been logged into the system in the given time.
If ( $Userdata.LastLogonTime -lt $LastDate)
{
$Userdata | Export-CSV 'C:\Users\gbu101\OneDrive - Winterthur Gas & Diesel Ltd\Documents\export_users.csv'
Write-Host "Users being exported"
}
}
Die Exportierung funktioniert, aber der Datumsvergleich leider nicht. Er exportiert einfach immer alle Nutzer, egal was ich angebe.Meine Vermutung liegt darin, dass ich das Datum von $Userdata zuerst in das DateTime Format umwandeln muss, da bin ich mir aber auch nicht ganz sicher...
Wo genau liegt hier der Fehler?
Besten Dank für eure Hilfe.
Gruss,
gabe
Please also mark the comments that contributed to the solution of the article
Content-ID: 602658
Url: https://administrator.de/contentid/602658
Printed on: October 9, 2024 at 16:10 o'clock
7 Comments
Latest comment
Meine Vermutung liegt darin, dass ich das Datum von $Userdata zuerst in das DateTime Format umwandeln muss
Nein, guckst du die Property ist schon im entsprechenden FormatLastLogonTime Property System.Nullable[datetime] LastLogonTime {get;}
Außerdem hast du einen Fehler beim Export, du exportierst quasi nur den letzten User weil du die Datei immer wieder mit nur einem User überschreibst .
$time = [datetime]::MinValue
if ([datetime]::TryParse((Read-Host "Enter the date for reference (dd/mm/yyyy hh:mm)"),[cultureinfo]::GetCultureInfo('de'),'None',[ref]$time)){
Get-Mailbox -ResultSize unlimited | Get-MailboxStatistics | ?{$_.LastLogonTime -lt $time} | select DisplayName,LastLogonTime | export-csv .\data.csv -Delimiter ";" -NoTypeInformation -Encoding UTF8
}else{
write-error "Datum ist im falschen Format!"
}
Ich bin gerade dabei ein kurzes Script zu schreiben, dass alle Nutzer aus exchange online exportieren soll, die vor einem bestimmten Datum sich eingeloggt haben. Hier ist das besagte Script:
[...]
Die Exportierung funktioniert, aber der Datumsvergleich leider nicht. Er exportiert einfach immer alle Nutzer, egal was ich angebe.Meine Vermutung liegt darin, dass ich das Datum von $Userdata zuerst in das DateTime Format umwandeln muss, da bin ich mir aber auch nicht ganz sicher...
Wo genau liegt hier der Fehler?
Wo genau liegt hier der Fehler?
U. a. daran, dass LastLoginTime schon seit einigen Versionen deprecated ist. Ein Ansatz könnte die Benutzung von Search-UnifiedAuditLog sein.
Nur zur Verständigung: was nimmt er hier als MinValue?
[datetime]::MinValue == Montag, 1. Januar 0001 00:00:00
Nachschlagen darfst du das auch gerne
https://docs.microsoft.com/de-de/dotnet/api/system.datetime.minvalue?vie ...
Moin,
works as designed:
hth
Erik
works as designed:
Zitat von @gabeBU:
> #Date
> [datetime]$LastDate = Read-Host "Enter the date for reference (dd/mm/yyyy hh:mm)"
>
>
> $Userdata = (Get-Mailbox) | Foreach {Get-MailboxStatistics $_.Identity | Select DisplayName, LastLogonTime
>
# Hier schreibst Du das Ergebnis in das Array $userdata und pipest es auf foreach. Ich würde
# da immer eine Schleife bevorzugen, weil das performanter ist. Aber gut. Es geht auch so.
> Write-Host $_.Identity "Has been checked."
# Hier benutzt Du korrekt die Variable $_, um das gepipete Objekt aus dem Array anzusprechen
> #Write user to CSV-File, if the user hasn't been logged into the system in the given time.
> If ( $Userdata.LastLogonTime -lt $LastDate)
# Und ab hier nimmst Du das ganze Array, das keine Eigenschaft .LastLogonTime hat.
> {
> $Userdata | Export-CSV 'C:\Users\gbu101\OneDrive - Winterthur Gas & Diesel Ltd\Documents\export_users.csv'
> Write-Host "Users being exported"
> }
# Naja, da das Objekt keine Eigenschaft hat, gibt es $null aus. Und $null ist kleiner als alles andere. Das ist
# sogar afaik kleiner als negative Werte. Also gibt er das ganze Objekt-Array aus.
>
> }
hth
Erik