Powershell: Nasıl pwdLastSet sorgulamak ve mantıklı var?


17

Active Directory güvenlik grubunda bir hesap grubu için son parola değişikliğini almam gerekiyor ve bu PowerShell'in iyi olması gereken bir şey gibi hissediyorum.

Şu anda baktığım AD hesabından pwdLastSet özniteliğini nasıl okuyacağım konusunda zaten takıldım. Böyle basit bir şey bile çalıştırıyor:

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

pwdLastSet için aşağıdaki gibi sonuçlar verir:

pwdLastSet            : {System.__ComObject}

Ben yanlış bir şekilde bu konuda gitmek gibi hissediyorum, bu yüzden sorgu ve sonra pwdLastSet özniteliği (değer Windows Epoch dayanır ve çok insan tarafından okunabilir değil) biçimlendirmek için en iyi yolu nedir?

Yanıtlar:


13

Bunu ek bileşen olmadan da yapabilirsiniz. Bunu denedim ve işe yaradı:

PS #> $ searcher = Yeni Nesne DirectoryServices.DirectorySearcher
PS #> $ searcher.Filter = "(& (samaccountname = kullanıcı1))"
PS #> $ sonuçları = $ searcher.findone ()
PS #> [datetime] :: fromfiletime ($ results.properties.pwdlastset [0])

10 Haziran 2009 Çarşamba 16:32:08

Ayrıca kullanıcı nesnesi şu şekilde ayarlanmışsa pwdLastSet için bir System .__ ComObject:
$ user = [adsi] "LDAP: // cn = user1, ou = Personel, ou = Kullanıcı Hesapları, dc = ramalamadingdong, dc = net "

Bu kullanıcı pwdLastSet değerini $ user nesnesinden almak için [System .__ ComObject] .InvokeMember () ve yansımayı kullanmanın bir yolu olmalı, ancak doğru şekilde başaramadım. Asla anlayamadım, bu yüzden yukarıdaki örneği kullandım ve devam ettim.

AD (veya Exchange veya SQL Server) ile çok iş yapacaksanız, bunun için ek bileşeni alıp bunu kullanmak isteyebilirsiniz.


1
Sözdizimini öğrenmeye çalışmak için PowerShell'de çeşitli basit görevleri yapmak için bir tekme attım. Ben baktım her yerde cevabın bir eklenti kullanmak olduğunu biraz depresifti. Teşekkürler!
Bob

19

Windows 7 / Windows Server 2008 R2 ile birlikte gelen dahili AD komutları artık bunu yeterince basit bir şekilde yapabilir. Windows 7'de Powershell isteminden:

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

"PasswordLastSet" özniteliği, gerçek "pwdLastSet" özniteliğinin çevrilmiş bir sürümü gibi görünüyor.


Sadece merak ParolaLastSet için herhangi bir değerin olmaması anlamına gelir ...% 100 parola başlangıçta ayarlandığından beri hiçbir değişiklik olmadığı anlamına mı geliyor?
Mikhail

Sınamak için bir kutum yok, ancak nesne üzerinde henüz bir parola ayarlanmadığını düşünüyorum.
Neobyte

@Mikhail, çoğu zaman PasswordLastSet için herhangi bir değerin olmaması, komutu yükseltilmiş bir istemde çalıştırmamanız anlamına gelir.
JPBlanc

3

Daha kolay bir yol var.

ADSI nesnesinin ConvertLargeIntegerToInt64 adlı bir yöntemi vardır. Bir zaman damgası özniteliğinin değerini sorgulayarak döndürülen System .__ Comobject değil , ADSI nesnesinin bir yöntem olduğunu unutmayın, bu nedenle $ user.pwdLastSet.value.ConvertLargeIntegerToInt64 () çalışmaz. Aşağıdaki gibi çağırmanız gerekir:

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

Bu, yukarıda Bratch tarafından açıklandığı gibi, okunabilir bir tarihe dönüştürülmesi gereken LDAP zaman damgasını alır. Bu, ADSI sağlayıcısı tarafından döndürülen herhangi bir zaman damgası öznitelik değeri için çalışır ve ConvertLargeIntegerToInt64 yöntemi bir dizin girdisini temsil eden herhangi bir nesne tarafından (inanıyorum) maruz kalır.

Hepsini bir araya getirirsek, parolanın son ayarlandığı tarihi nasıl elde edeceğiniz aşağıda açıklanmıştır:

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

3

AD Bilgisayarları görüntülemenin kolay bir yolu:

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

1

Yükleme: http://www.quest.com/powershell/activeroles-server.aspx

açık powershell

Aşağıdaki komutları çalıştırın:

add-PSSnapin quest.activeroles.admanagement

Get-QADUser | ft görünen adı, PasswordLastSet

İlk komut, az önce indirdiğiniz görev anlık görüntüsünü yükler. Başlangıç ​​menünüzde görev yapmak için kısayolu kullanırsanız bunu yapmanız gerekmez. İkinci komut, tüm kullanıcıların listesini ve parolanın en son değiştirildiği zamanı alır.



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.