it-swarm-tr.com

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

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?

17
Bob

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

 PS #> $ searcher = Yeni Nesne DirectoryServices.DirectorySearcher 
 PS #> $ searcher.Filter = "(& (samaccountname = user1))" [.____. PS #> $ sonuçları = $ searcher.findone () 
 PS #> [datetime] :: fromfiletime ($ results.properties.pwdlastset [0]) 
 
 10 Haziran 2009 Çarşamba 4: 32:08 PM 
 

Ben de kullanıcı nesnesi böyle ayarlanmışsa pwdLastSet için bir System .__ ComObject olsun:
$ user = [adsi] "LDAP: // cn = user1, ou = Personel, ou = Kullanıcı Hesapları, dc = ramalamadingdong, dc = net"

$ System nesnesinden bu pwdLastSet değerini 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.

13
Bratch

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

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.

19
Neobyte

Daha kolay bir yol var.

ADSI nesnesinin ConvertLargeIntegerToInt64 adlı bir yöntemi vardır. ADSI nesnesinin bir yöntemi olduğunu ve zaman damgası özniteliğinin değerini sorgulayarak döndürülen not System .__ Comobject öğesinin, bu nedenle $ user.pwdLastSet.value.ConvertLargeIntegerToInt64 () işlevinin çalışmadığını unutmayın. 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
Adi Inbar

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

ConvertADSLargeInteger işlevini komut dosyanıza ekleyin, buradan alabilirsiniz:

PowerShell: Active Directory IADSLargeInteger'ı System.Int64'e dönüştürün

İşte nasıl kullanacağınız:

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

Yükleyin: 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.

1
baz

belki passwordLastChanged özelliğini kullanmaya bakmalısınız. Daha fazla bilgi için buraya bakın: http://www.Microsoft.com/technet/scriptcenter/resources/qanda/aug06/hey0801.mspx

0
mrTomahawk