Zu meinen Aufgaben gehört es, sicherzustellen, dass für Computer in einer bestimmten Organisationseinheit Folgendes gilt: Was tatsächlich verwendet wird, entspricht dem, was in AD aufgeführt ist, dem, was in SCCM aufgeführt ist. Dies gilt für eine Umgebung mit 250.000 PCs, aber ich interessiere mich insbesondere für die 70.000 einer Abteilung. Es ist ziemlich einfach, AD mit SCCM zu vergleichen, aber es ist schwieriger, den Überblick über Computer zu behalten, die nicht wirklich existieren. Ich versuche, mir kreative Wege auszudenken, um das herauszufinden.
meine Frage lautet: Wäre eine gute Möglichkeit zum Auffinden nicht vorhandener Maschinen, AD mit Powershell nach Computern abzufragen, die sich seit X Tagen nicht angemeldet haben?
Ich habe über eine viel kompliziertere Aufgabe in Powershell nachgedacht, die wie folgt aussieht: DNS-Hostnamen aus AD abrufen, alle Hosts in meiner Organisationseinheit pingen und sie bei Erfolg aus der Liste entfernen. Führen Sie dies etwa eine Woche lang alle 6 Stunden aus und entfernen Sie weiterhin Maschinen, deren Ping erfolgreich war. Laptops müsste ich anders handhaben.
Irgendwelche anderen Ideen, Vorschläge usw.?
Antwort1
Als Variante von Patricks umfassendem Vorschlag würde ich das replizierte LastLogontimeStamp
Attribut verwenden, um die Suche einzugrenzen:
Import-Module ActiveDirectory
$threshold = (Get-Date).AddDays(-44)
$computers Get-ADComputer -Filter * -SearchBase "ou=desiredou,dc=domain,dc=tld" -Properties LastLogontimeStamp
$oldComps = $computers | where {[Date.Time]::FromFileTime($_.lastlogontimestamp) -lt $threshold}
$oldComps
hält dann alle Computer zurück, die sich seit mindestens 30 Tagen nicht angemeldet haben.
Der Schwellenwert von 44 Tagen ist etwas kontraintuitiv, aber um eine Flut von Replikationsaktualisierungen zu verhindern LastLogontimeStamp
, wird das Attribut nur aktualisiert, wenn sein Wert älter als 9 Tage ist. Wenn der Wert zwischen 9 und 14 Tage alt ist, wird in einem zufälligen Prozess bestimmt, ob er aktualisiert wird oder nicht.
Hier ist eine tolle Erklärung:http://blogs.technet.com/b/askds/archive/2009/04/15/the-lastlogontimestamp-attribute-what-it-was-designed-for-and-how-it-works.aspx
Antwort2
Es klingt, als bräuchten Sie so etwas wiealtercmp:http://www.joeware.net/freetools/tools/oldcmp/
Dadurch wird in der angegebenen Domäne oder Organisationseinheit nach Maschinen gesucht, die sich in den letztenXTage und stellt Ihnen Berichte oder die Möglichkeit zur Deaktivierung dieser Computerkonten bereit.
Das Tool und die Darstellung im Active Directory stellen nur das dar, was die Domäne weiß. Sie müssen also noch einen Berichtsprozess erstellen.externin die Active Directory-Umgebung, damit Sie die Maschinen verfolgen können, die als nicht verwendet gemeldet werden, um zu überprüfen, ob sie das Unternehmen tatsächlich verlassen haben und entfernt werden sollten. Ein Paradebeispiel hierfür sind tatsächlich Laptops: Die Tools melden möglicherweise, dass ein Laptop nicht verwendet wird, obwohl dies in Wirklichkeit die Tatsache verbirgt, dass der Laptop einfach offline verwendet wird.
Es gibt ähnliche Ansätze mit Berichten in SCCM, um den Zeitpunkt zu ermitteln, zu dem eine Maschine zuletzt einen Heartbeat erzeugen konnte. Vorausgesetzt, die Maschinen verfügen über funktionierende SCCM-Clients, wäre dies wohl ein besserer Ansatz als das Abrufen eines Berichts und der Versuch, sie anzupingen – eine Technik, die unglaublich arbeitsintensiv und anfällig für falsch positive Ergebnisse wäre.
Antwort3
Das AD-Objekt eines Computers verfügt über einen LastLogon-Zeitstempel, der Ihnen einen nützlichen Indikator für den aktuellen Status eines Computers bietet.
Wenn Sie Cmdlets von Drittanbietern installieren können, dannQuest Active DirectoryCmdlets sind unglaublich hilfreich.
$result = @()
$OU = "DC=ncp,DC=co,DC=uk"
Foreach($computer in (Get-QADComputer -SearchRoot "$ou" -sizelimit 0))
{
$result += "$((Get-QADComputer $computer -IncludeAllProperties).lastLogon), $computer"
}
$result listet alle Ihre Computer in der angegebenen Organisationseinheit und ihr letztes Anmeldedatum wie folgt auf:
06/10/2013 08:48:25, NATTHN21$
05/13/2011 14:54:04, NATTHN02$
06/10/2013 08:42:51, NATRHN01$
06/10/2013 08:45:38, NCPHON01$
Sie müssten dies für alle DCs ausführen, bei denen sich dieser Computer anmelden kann. Bei einer Organisation Ihrer Größe ist dies wahrscheinlich nicht praktikabel.
Als alternative Maßnahme. Die Objekteigenschaft „whenChanged“ in Ihren Computer-AD-Objekten ist das Computerkontokennwort. Dieses wird nach 30 Tagen automatisch aktualisiert (normalerweise Standard in Win 2K und höher. Dies kann durch Überprüfen des standardmäßigen Domänengruppenrichtlinienobjekts bestätigt werden).
Wenn Sie Computerkonten finden, bei denen „whenChanged“ älter als 30 Tage ist, handelt es sich um Computer, die sich in diesem Zeitraum nicht angemeldet haben. Dies funktioniert gut für größere Netzwerke mit mehreren Rechenzentren, da diese Zahl repliziert wird, während dies bei „lastLogon“ nicht der Fall ist.
Ändern Sie einfach die Zeile im obigen Skript, um „.lastLogon“ zu entfernen und durch „.whenChanged“ zu ersetzen.
Wenn Sie Quest AD nicht installieren können, müssen Sie eine Maschine mit installiertem RSAT (oder einen DC) verwenden und das Cmdlet „Get-ADComputer“ verwenden (geben Sie „Import-Module ActiveDirectory“ ein).
Eine dritte Möglichkeit zur Nachverfolgung zukünftiger Nutzung wäre die Verwendung eines Anmeldeskripts. Ich habe dies vor einigen Jahren bei einem Kunden getan und es hat gut funktioniert, obwohl wir auf einigen Hundert Maschinen waren, nicht auf ~70.000.
Zu diesem Zeitpunkt war unser Anmeldeskript eine .BAT-Datei. Erstellen Sie eine neue .BAT in NETLOGON mit der folgenden Zeile (z. B. LogonTrack.BAT)
::LogonTrack.BAT
ECHO %date% >Z:\%computername%
und fügen Sie am Ende jeder Anmelde-Batchdatei, die von Ihren 70K-Benutzern verwendet werden kann, eine Zeile hinzu
call LogonTrack.BAT
Dadurch wird eine Datei mit dem Namen des Computers erstellt. Als Dateidatum dient die letzte Anmeldung am zugeordneten Ort.
Ich würde das nicht empfehlen, aber Sie könnten Eventlogs auf diese Informationen prüfen, obwohl ich es im Allgemeinen vermeide, Log Diving durchzuführen, wo es möglich ist. Sie benötigenEreignis 4624.
Schließlich benutze ich auchLANSweeperbei einem Client, was großartig ist. Das bietet großartige Berichte über alte Computer. Da es sich jedoch um ein kostenpflichtiges Produkt handelt, das eine separate Installation und einen Server erfordert, ist es möglicherweise nicht gut für Sie. Außerdem benötigen Sie für 250K-Systeme ein ziemlich leistungsstarkes Backend und keine umfunktionierte VM, die herumliegt.