Ich versuche, eine PowerShell-Suche in AD durchzuführen, um nur Computer (keine Server oder andere) zu finden, die in den letzten 30 Tagen angemeldet wurden. Ich habe den größten Teil des Skripts geschrieben, mit Ausnahme der Beschränkung auf 30 Tage. Jede Hilfe wäre sehr dankbar.
Get-ADComputer -Filter * -Properties * | FT Name, Betriebssystem, LastLogonDate -Autosize | Out-File C: \ Temp \ ComputerLastLogonDate.csv
Antworten:
Holen Sie sich nur die Eigenschaften, die Sie verwenden möchten ... es ist effizienter. Das Abrufen aller Eigenschaften aller Computer in der Domäne, wenn Sie nicht wirklich alle Eigenschaften benötigen, stellt unnötig hohe Anforderungen an Ihren Domänencontroller. Es ist verschwenderisch.
Get-ADComputer -Filter * -Properties OperatingSystem, LastLogonDate
ist besser, da Sie nicht alle Eigenschaften benötigen . (Die Eigenschaft 'Name' ist immer enthalten.)Formatieren Sie die Ausgabe nicht bis zum Ende. Mit anderen Worten, Format-Table und Format-List sollten die letzten Cmdlets in der gesamten Cmdlet-Kette sein, an die Daten weitergeleitet werden.
Get-ADComputer -Filter * -Properties OperatingSystem, LastLogonDate | Where { $_.LastLogonDate -GT (Get-Date).AddDays(-30) }
Dies ist etwas besser, aber es gibt immer noch einige Ineffizienzen, da Sie immer noch einen Datensatz aller Computer abrufen. Sie können den Domänencontroller die Filterung für Sie durchführen lassen.
$LastMonth = $(((Get-Date).AddDays(-30)).ToFileTime())
Get-ADComputer -LDAPFilter "(lastLogonTimeStamp>=$LastMonth)" -Properties OperatingSystem,LastLogonDate
Der Grund, warum ich dort den lastLogonTimeStamp verwendet habe (dies ist eine "Dateizeit", keine .NET DateTime), ist, dass "LastLogonDate" kein echtes LDAP-Attribut ist. LastLogonDate ist einfach die hilfreiche Methode von PowerShell, das lastLogonTimestamp-Attribut automatisch für Sie zu konvertieren. lastLogonTimestamp ist das "echte" LDAP-Attribut.
Wenn der Domänencontroller anstelle des vollständigen Satzes ALLER Computer einen gefilterten Satz an Sie zurückgeben kann, werden weniger Daten über das Kabel übertragen und weniger Daten von PowerShell verarbeitet.
Beachten Sie auch, dass Sie sich mit Computern befassen müssen, die:
quelle
Get-ADComputer -Filter * -Properties OperatingSystem, LastLogonDate | Where { $_.LastLogonDate -GT (Get-Date).AddDays(-30) } | FT Name, OperatingSystem, LastLogonDate
Wie würde ich es dann auf nur Computer und nicht auch auf Server beschränken?Ihr Befehl filtert überhaupt nicht nur nach Arbeitsstationen.
Sie müssen das Feld LastLogonTimeStamp verwenden, damit Sie es leicht filtern und dann für den Export in eine DateTime konvertieren können.
Diese Informationen sind auch online verfügbar. Wie in diesem Beispiel hier, das ich leicht modifiziert habe, um nur Workstations zurückzugeben. Beachten Sie, dass sie nur die benötigten Eigenschaften abfragen. Es ist effizienter. Ich habe auch keine Ahnung, warum sie in diesem Skript eine $ domain-Variable haben. Es scheint völlig nutzlos.
Von hier aus referenziert: https://gallery.technet.microsoft.com/scriptcenter/Get-Inactive-Computer-in-54feafde
Siehe hierzu auch die folgenden Hinweise:
Das LastLogonTimeStamp-Attribut / wofür es entwickelt wurde
Konvertieren von TimeStamp in DateTime
quelle
Dies sollte Ihnen den Einstieg in die Richtung erleichtern, in die Sie gehen möchten.
quelle
Beachten Sie, dass LastLogonDate eine konvertierte Version von LastLogonTimeStamp ist. LastLogonTimeStamp ist nicht die genaueste Darstellung der letzten Anmeldezeit des Computers. Standardmäßig kann es um 14 Tage ausgeschaltet sein. Weitere Informationen - https://social.technet.microsoft.com/wiki/contents/articles/22461.understanding-the-ad-account-attributes-lastlogon-lastlogontimestamp-and-lastlogondate.aspx
Wenn Sie eine genauere Anmeldezeit erhalten möchten, müssen Sie das Attribut lastLogon verwenden, das jedoch nicht auf alle Domänencontroller repliziert wird. Daher müssen Sie alle Domänencontroller iterieren, um den neuesten Wert zu erhalten. Sie müssen die letzte Anmeldezeit berechnen und können sie erst dann auf "letzte 30/60/90 Tage" beschränken.
Hier finden Sie ein Beispiel, wie dieser Algorithmus zum Abrufen der letzten Anmeldezeit des Benutzers realisiert wird:
Es gibt alternative Möglichkeiten, um das gleiche Ergebnis einfacher und schneller zu erzielen. Sie können das Active Directory-Berichterstellungstool AD FastReporter Free ausprobieren . Es wird die genaue Berechnung der letzten Anmeldung für Sie durchführen. Installieren Sie es einfach, gehen Sie zur Registerkarte Computer und wählen Sie "Computer, die sich in den letzten 30 Tagen angemeldet haben". Klicken Sie auf "Generieren". Das Ergebnis enthält auch DC-Server, die Sie jedoch nach dem Export in CSV- und XLSX-Dateien problemlos entfernen können. PS Ich bin der Besitzer und Entwickler dieses Tools.
quelle