it-swarm.com.de

Powershell: Wie frage ich pwdLastSet ab und habe es Sinn?

Ich muss die letzte Kennwortänderung für eine Gruppe von Konten in einer Active Directory-Sicherheitsgruppe erhalten, und ich bin der Meinung, dass PowerShell dies gut kann.

Im Moment bin ich bereits nicht sicher, wie ich das pwdLastSet-Attribut aus dem AD-Konto lesen soll, das ich mir anschaue. Sogar so etwas Einfaches laufen lassen:

[adsi] "LDAP://cn=user1,ou=Staff,ou=User Accounts,dc=ramalamadingdong,dc=net" | Format-List *

gibt Ergebnisse für pwdLastSet an, die folgendermaßen aussehen:

pwdLastSet            : {System.__ComObject}

Ich habe das Gefühl, dass ich dies falsch mache. Wie kann ich also die Ausgabe des pwdLastSet-Attributs am besten abfragen und dann formatieren (der Wert basiert auf der Windows-Epoche und ist nicht sehr gut lesbar)?

17
Bob

Sie können dies auch ohne Snap-In tun. Ich habe es versucht und es hat funktioniert:

 PS #> $ searcher = New-Object DirectoryServices.DirectorySearcher 
 PS #> $ searcher.Filter = "(& (samaccountname = user1))" 
 PS #> $ results = $ searcher.findone () 
 PS #> [datetime] :: fromfiletime ($ results.properties.pwdlastset [0]) 
 
 Mittwoch, 10. Juni 2009 4: 32:08 Uhr 
 

Ich erhalte auch ein System .__ ComObject für pwdLastSet, wenn ich das Benutzerobjekt wie folgt festgelegt habe:
$ User = [adsi] "LDAP: // cn = Benutzer1, ou = Mitarbeiter, ou = Benutzerkonten, dc = ramalamadingdong, dc = net"

Es sollte eine Möglichkeit geben, [System .__ ComObject] .InvokeMember () und Reflection zu verwenden, um diesen pwdLastSet-Wert vom $ user-Objekt abzurufen, aber ich konnte es nicht richtig machen. Ich habe es nie herausgefunden, also habe ich das obige Beispiel verwendet und bin weitergegangen.

Wenn Sie viel mit AD (oder Exchange oder SQL Server) arbeiten, möchten Sie möglicherweise das Snapin dafür herunterladen und verwenden.

13
Bratch

Die integrierten AD-Commandlets, die mit Windows 7/Windows Server 2008 R2 geliefert werden, können dies jetzt einfach genug tun. Unter Windows 7 über eine Powershell-Eingabeaufforderung:

Import-Module ActiveDirectory
Get-ADUser 'user1' -properties PasswordLastSet | Format-List

Das Attribut "PasswordLastSet" scheint eine übersetzte Version des tatsächlichen Attributs "pwdLastSet" zu sein.

19
Neobyte

Es gibt einen einfacheren Weg.

Das ADSI-Objekt verfügt über eine Methode namens ConvertLargeIntegerToInt64. Beachten Sie, dass es sich um eine Methode des ADSI-Objekts handelt und nicht das System .__ Comobject, das durch Abfragen des Werts eines Zeitstempel-Attibutes zurückgegeben wird, sodass $ user.pwdLastSet.value.ConvertLargeIntegerToInt64 () nicht funktioniert. Sie müssen es wie folgt aufrufen:

$user.ConvertLargeIntegerToInt64($user.pwdLastSet.value)

Dadurch erhalten Sie den LDAP-Zeitstempel, der in ein lesbares Datum konvertiert werden muss, wie oben von Bratch erläutert. Dies funktioniert für jeden vom ADSI-Anbieter zurückgegebenen Zeitstempelattributwert, und die ConvertLargeIntegerToInt64-Methode wird (glaube ich) von jedem Objekt verfügbar gemacht, das einen Verzeichniseintrag darstellt.

Wenn Sie alles zusammenfassen, erhalten Sie hier das Datum, an dem das Passwort zuletzt festgelegt wurde:

$user = [ADSI]'LDAP://cn=someusername,ou=someou,dc=somedomain,dc=com'
[datetime]::FromFileTime($user.ConvertLargeIntegerToInt64($user.pwdLastSet.value))
3
Adi Inbar

Hier ist eine einfache Möglichkeit, die AD-Computer anzuzeigen:

Get-ADComputer -Filter *  -Properties name,LastLogonDate,PasswordLastSet,modified,modifyTimeStamp |
  FT Name,DNSHostName,LastLogonDate,PasswordLastSet,modified,modifyTimeStamp | 
    Out-File Computers.csv
3
William

Fügen Sie die ConvertADSLargeInteger-Funktion zu Ihrem Skript hinzu. Sie können sie hier herunterladen:

PowerShell: Active Directory IADSLargeInteger in System.Int64 konvertieren

So würden Sie es verwenden:

$user = [adsi] "LDAP://cn=user1,ou=Staff,ou=User Accounts,dc=ramalamadingdong,dc=net"
[datetime]::FromFileTimeUtc((ConvertADSLargeInteger $user.pwdlastset.value))
1
Mike Pfeiffer

Installieren Sie: http://www.quest.com/powershell/activeroles-server.aspx

offene Powershell

Führen Sie die folgenden Befehle aus:

add-PSSnapin quest.activeroles.admanagement

Get-QADUser | ft Anzeigename, PasswordLastSet

Der erste Befehl lädt das gerade heruntergeladene Quest-Snapin. Sie müssen dies nicht tun, wenn Sie die Verknüpfung zum Quest in Ihrem Startmenü verwenden. Der zweite Befehl ruft eine Liste aller und der Benutzer sowie die Zeit ab, zu der das Kennwort zuletzt geändert wurde.

1
baz

vielleicht sollten Sie sich die Verwendung der Eigenschaft passwordLastChanged ansehen. Weitere Informationen finden Sie hier: http://www.Microsoft.com/technet/scriptcenter/resources/qanda/aug06/hey0801.mspx

0
mrTomahawk