deflos
Goto Top

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:

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
liste

Content-ID: 767279109

Url: https://administrator.de/contentid/767279109

Ausgedruckt am: 23.11.2024 um 08:11 Uhr

em-pie
Lösung em-pie 22.06.2021 aktualisiert um 15:16:38 Uhr
Goto Top
Moin,

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
DefloS
DefloS 22.06.2021 um 15:52:55 Uhr
Goto Top
VIELEN DANK!

Das sieht ziemlich brauchbar aus! Ich teste damit mal weiter aber ich glaube das ist es! face-smile
em-pie
em-pie 22.06.2021 um 16:22:07 Uhr
Goto Top
Sehr gut face-smile
Ist auf jeden Fall kürzer face-big-smile

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...
DefloS
DefloS 22.06.2021 aktualisiert um 16:25:20 Uhr
Goto Top
EDIT/UPDATE
Wäre es kompliziert, wenn das Script nun alle DomainController abfragt und jeweils das neueste Ergebnis wählt..?

Leider haben wir ein paar DC mehr und Logins log werden untereinander nicht repliziert (bitte nicht fragen warum)

EDIT2:
Jetzt haben sich unsere Post überschnitten.
Aber ja, das in Zeile 12 ist so gewünscht aus o.g. Gründen :D
em-pie
em-pie 22.06.2021 um 16:52:55 Uhr
Goto Top
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:
$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...