Get-ADComputer -Filter * -Properties *
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.)
| FT Name, Betriebssystem, LastLogonDate -Autosize
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:
- Haben Sie ein (null) LastLogonDate
- Haben Sie ein LastLogonDate vom 1.1.1601 oder den Beginn der Epoche.