Powershell: come posso eseguire una query su pwdLastSet e avere senso?


16

Devo ottenere l'ultima modifica della password per un gruppo di account in un gruppo di sicurezza di Active Directory e credo che questo sia qualcosa su cui PowerShell dovrebbe essere bravo.

In questo momento, sono già bloccato su come leggere l'attributo pwdLastSet dall'account AD che sto guardando. Anche eseguendo qualcosa di semplice come questo:

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

dà risultati per pwdLastSet che appaiono così:

pwdLastSet            : {System.__ComObject}

Sento che sto andando su questo nel modo sbagliato, quindi qual è il modo migliore per interrogare e quindi formattare l'output (il valore è basato sull'epoca di Windows e non molto leggibile) dell'attributo pwdLastSet?

Risposte:


13

Puoi anche farlo senza uno snap-in. Ho provato questo e ha funzionato:

PS #> $ searcher = New-Object DirectoryServices.DirectorySearcher
PS #> $ searcher.Filter = "(& (samaccountname = user1))"
PS #> $ results = $ searcher.findone ()
PS #> [datetime] :: fromfiletime ($ results.properties.pwdlastset [0])

Mercoledì 10 giugno 2009 16:32:08

Ottengo anche un sistema .__ ComObject per pwdLastSet se ho l'oggetto utente impostato in questo modo:
$ user = [adsi] "LDAP: // cn = user1, ou = Staff, ou = Account utente, dc = ramalamadingdong, dc = net "

Dovrebbe esserci un modo per usare [System .__ ComObject] .InvokeMember () e reflection per ottenere quel valore pwdLastSet dall'oggetto $ user, ma non sono stato in grado di farlo bene. Non l'ho mai capito, quindi ho usato l'esempio sopra e sono passato.

Se hai intenzione di lavorare molto con AD (o Exchange o SQL Server), potresti voler ottenere lo snapin per questo e usarlo.


1
Sono stato pronto a svolgere varie semplici attività in PowerShell per provare ad apprendere la sintassi. Ero un po 'depresso che ovunque guardassi la risposta era usare un componente aggiuntivo. Grazie!
Bob,

19

I commandlet integrati di AD forniti con Windows 7 / Windows Server 2008 R2 ora possono farlo in modo abbastanza semplice. Su Windows 7 da un prompt di Powershell:

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

L'attributo "PasswordLastSet" sembra essere una versione tradotta dell'attuale attributo "pwdLastSet".


Solo curioso cosa significa l'assenza di qualsiasi valore per PasswordLastSet ... Significa al 100% che non ci sono stati cambiamenti da quando la password è stata impostata inizialmente?
Mikhail,

Non ho una scatola su cui testarlo, ma penso sia più probabile che non sia stata ancora impostata alcuna password sull'oggetto.
Neobyte,

@Mikhail, la maggior parte delle volte l'assenza di qualsiasi valore per PasswordLastSet significa che non si esegue il comando in un prompt elevato.
JPBlanc,

3

C'è un modo più semplice.

L'oggetto ADSI ha un metodo chiamato ConvertLargeIntegerToInt64. Si noti che si tratta di un metodo dell'oggetto ADSI e non del sistema .__ Comobject restituito eseguendo una query sul valore di un attobute timestamp, quindi $ user.pwdLastSet.value.ConvertLargeIntegerToInt64 () non funzionerà. È necessario invocarlo come segue:

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

Ciò ti porterà il timestamp LDAP, che deve essere convertito in una data leggibile, come spiegato da Bratch sopra. Questo funzionerà per qualsiasi valore di attributo data / ora restituito dal provider ADSI e il metodo ConvertLargeIntegerToInt64 è (credo) esposto da qualsiasi oggetto che rappresenta una voce di directory.

Mettendo tutto insieme, ecco come ottieni la data in cui la password è stata impostata l'ultima volta:

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

3

Ecco un modo semplice per visualizzare i computer AD:

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

1

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

PowerShell aperto

Esegui i seguenti comandi:

add-PSSnapin quest.activeroles.admanagement

Get-QADUser | ft displayname, PasswordLastSet

Il primo comando carica lo snapin della missione che hai appena scaricato. Non è necessario farlo se si utilizza la scorciatoia per la ricerca nel menu iniziale. Il secondo comando ottiene un elenco di tutti gli utenti e l'ora dell'ultima modifica della password.



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.