PowerShell: Last Logon mit Namen und Datum
Hallo,
kurz vorweg: Ich bin wirklich kein PS Profi und habe mir das Script mit Mühe und Not zusammen geklickt!
Es tut beinahe genau das was ich möchte, nur leider fehlt ein WINZIGES Detail: Die Namen die zum Login Datum gehören. Ich weiß nicht wie ich das ergänzen soll....
Im Prinzip möchte ich das Datum der letzten Anmeldung haben und daneben den user Login aus meiner Liste die das Script abarbeitet.
Aktuell sieht das Script so aus:
Am Ende kommt dann eine Liste raus, von der ich eigentlich nur die erste Spalte brauche und daneben den dazugehörigen Namen, aber ich bekomme weder die anderen Infos weg, noch bekomme ich die Namen daneben.
Die "echte" Liste beinhaltet ca. 2000 Namen...
Ich wäre um Hilfe echt dankbar, ich komme einfach nicht weiter egal was ich versuche
LG
kurz vorweg: Ich bin wirklich kein PS Profi und habe mir das Script mit Mühe und Not zusammen geklickt!
Es tut beinahe genau das was ich möchte, nur leider fehlt ein WINZIGES Detail: Die Namen die zum Login Datum gehören. Ich weiß nicht wie ich das ergänzen soll....
Im Prinzip möchte ich das Datum der letzten Anmeldung haben und daneben den user Login aus meiner Liste die das Script abarbeitet.
Aktuell sieht das Script so aus:
Import-Module ActiveDirectory
$alluser1=Get-Content "C:\data\ListeMitNamen.txt"
$output = for ($i=0; $i -lt $alluser1.Length; $i++)
{
write-host -ForegroundColor Yellow $alluser1[$i]
([DateTime][long](
$(ForEach ($dc in ((get-addomaincontroller -filter *).name))
{
(Get-ADUser -Identity $alluser1[$i] -Properties "LastLogon" -server $dc).LastLogon
}
) | Measure -Maximum).Maximum).AddYears(1600).AddHours(2)
}
$output | Export-Csv C:\data\02Xoutputprimary.csv -delimiter ";" -NoTypeInformation -Encoding UTF8
Am Ende kommt dann eine Liste raus, von der ich eigentlich nur die erste Spalte brauche und daneben den dazugehörigen Namen, aber ich bekomme weder die anderen Infos weg, noch bekomme ich die Namen daneben.
Die "echte" Liste beinhaltet ca. 2000 Namen...
Ich wäre um Hilfe echt dankbar, ich komme einfach nicht weiter egal was ich versuche
LG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 767279109
Url: https://administrator.de/forum/powershell-last-logon-mit-namen-und-datum-767279109.html
Ausgedruckt am: 26.12.2024 um 01:12 Uhr
5 Kommentare
Neuester Kommentar
Moin,
meinst du so:
Gruß
em-pie
meinst du so:
$usersin = 'D:\Scripting\test\userlist.txt'
$usersout = 'D:\Scripting\test\userLogon.csv'
Import-Module ActiveDirectory
$users = Get-Content $usersin
Get-ADUser -Filter '*' -Properties LastLogonDate | Where-Object { $users -contains $_.SamAccountName } | Select-Object Name, LastLogonDate | Sort-Object Name | Export-Csv $usersout -NoType -delimiter ";"
Gruß
em-pie
Sehr gut
Ist auf jeden Fall kürzer
Falls du weitere Spalten benötigst, dann ergänze diese im Bereich Select-Object
Falls du weitere Einschränkunen benötigst, setze dich mal mit Where-Object auseinander
Btw, was deinen Code oben anbelangt:
In Zeile 12 sorgst du dafür, dass dein foreach für jeden gefundenen DomainController läuft. In einem Unternehmen/ einer Gruppe, in dem es schon mal ein paar Duzend geben kann, wären das in deinem Fall 2000 (User in iste) * Anzahl DCs an durchläufen gewesen...
Ist auf jeden Fall kürzer
Falls du weitere Spalten benötigst, dann ergänze diese im Bereich Select-Object
Falls du weitere Einschränkunen benötigst, setze dich mal mit Where-Object auseinander
Btw, was deinen Code oben anbelangt:
In Zeile 12 sorgst du dafür, dass dein foreach für jeden gefundenen DomainController läuft. In einem Unternehmen/ einer Gruppe, in dem es schon mal ein paar Duzend geben kann, wären das in deinem Fall 2000 (User in iste) * Anzahl DCs an durchläufen gewesen...
Zitat von @DefloS:
EDIT/UPDATE
Wäre es kompliziert, wenn das Script nun alle DomainController abfragt und jeweils das neueste Ergebnis wählt..?
Stufe 1 wäre:EDIT/UPDATE
Wäre es kompliziert, wenn das Script nun alle DomainController abfragt und jeweils das neueste Ergebnis wählt..?
$usersin = 'D:\Scripting\test\userlist.txt'
$usersout = 'D:\Scripting\test\userLogon.csv'
Import-Module ActiveDirectory
$dcs = Get-ADDomainController -Filter * | Select Hostname
$users = Get-Content $usersin
foreach ($dc in $dcs) {
Get-ADUser -Filter '*' -Properties LastLogonDate | Where-Object { $users -contains $_.SamAccountName } | Select-Object @{n="DC";e={$dc.Hostname}}, Name, LastLogonDate | Sort-Object Name | Export-Csv $usersout -NoType -delimiter ";" -Append
}
Das jüngste Ergebnis müsste man herausfiltern - irgendwie. Da wäre ich aber erst einmal überfragt.
Mit obigen hast du jetzt "erst einmal" alles doppelt, aber in der ersten Spalte den Namen des DCs stehen.
Vermutlich ginge das mit einer weiteren Einschränkung alá "Where MAX(Logondate) = Logondate" oder so etwas...