risposta-alla-domanda-sullo-sviluppo-web-bd.com

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

Devo ottenere l'ultima modifica della password per un gruppo di account in un gruppo di sicurezza di Active Directory e penso 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?

17
Bob

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 #> $ risultati = $ searcher.findone () 
 PS #> [datetime] :: fromfiletime ($ results.properties.pwdlastset [0]) 
 
 Mercoledì 10 giugno 2009 4: 32:08 PM 
 

Ottengo anche un System .__ 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.

13
Bratch

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".

19
Neobyte

C'è un modo più semplice.

L'oggetto ADSI ha un metodo chiamato ConvertLargeIntegerToInt64. Si noti che è un metodo dell'oggetto ADSI e not the System .__ Comobject restituito interrogando il 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
Adi Inbar

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
3
William

Aggiungi la funzione ConvertADSLargeInteger al tuo script, puoi ottenerla qui:

PowerShell: converti IADSLargeInteger di Active Directory in System.Int64

Ecco come lo useresti:

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

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 snap-in della ricerca 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.

1
baz

forse dovresti guardare usando la proprietà passwordLastChanged. Guarda qui per ulteriori informazioni: http://www.Microsoft.com/technet/scriptcenter/resources/qanda/aug06/hey0801.mspx

0
mrTomahawk