it-swarm-id.com

Powershell: Bagaimana cara saya meminta pwdLastSet dan masuk akal?

Saya perlu mendapatkan perubahan kata sandi terakhir untuk sekelompok akun di grup keamanan Direktori Aktif, dan saya merasa ini adalah sesuatu yang harus dilakukan PowerShell dengan baik.

Saat ini, saya sudah terjebak pada cara membaca atribut pwdLastSet dari akun AD yang saya lihat. Bahkan menjalankan sesuatu yang sederhana seperti ini:

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

memberikan hasil untuk pwdLastSet yang muncul seperti ini:

pwdLastSet            : {System.__ComObject}

Saya merasa saya melakukan hal ini dengan cara yang salah, jadi apa cara terbaik untuk melakukan query dan kemudian memformat output (nilainya didasarkan pada Windows Epoch dan tidak dapat dibaca oleh manusia) dari atribut pwdLastSet?

17
Bob

Anda juga dapat melakukan ini tanpa snap-in. Saya mencoba ini dan berhasil:

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

Saya juga mendapatkan Sistem .__ ComObject untuk pwdLastSet jika saya memiliki objek pengguna yang diatur seperti ini:
$ user = [adsi] "LDAP: // cn = user1, ou = Staf, ou = Akun Pengguna, dc = ramalamadingdong, dc = net"

Seharusnya ada cara untuk menggunakan [System .__ ComObject] .InvokeMember () dan refleksi untuk mendapatkan nilai pwdLastSet dari objek $ user, tapi saya belum bisa memperbaikinya. Saya tidak pernah memahaminya, jadi saya menggunakan contoh di atas dan melanjutkan.

Jika Anda akan melakukan banyak pekerjaan dengan AD (atau Exchange atau SQL Server) Anda mungkin ingin mendapatkan snapin untuk itu dan menggunakannya.

13
Bratch

Commandlets AD bawaan yang datang dengan Windows 7/Windows Server 2008 R2 sekarang dapat melakukan ini cukup sederhana. Di Windows 7 dari Prompt Powershell:

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

Atribut "PasswordLastSet" tampaknya merupakan versi terjemahan dari atribut "pwdLastSet" yang sebenarnya.

19
Neobyte

Ada cara yang lebih mudah.

Objek ADSI memiliki metode yang disebut ConvertLargeIntegerToInt64. Perhatikan bahwa ini adalah metode objek ADSI dan tidak Sistem .__ Comobject yang dikembalikan dengan menanyakan nilai attibute timestamp, jadi $ user.pwdLastSet.value.ConvertLargeIntegerToInt64 () tidak akan berfungsi. Anda perlu menjalankannya sebagai berikut:

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

Itu akan memberi Anda cap waktu LDAP, yang perlu dikonversi ke tanggal yang dapat dibaca, seperti dijelaskan oleh Bratch di atas. Ini akan berfungsi untuk nilai atribut timestamp apa pun yang dikembalikan oleh penyedia ADSI, dan metode ConvertLargeIntegerToInt64 (saya percaya) diekspos oleh objek apa pun yang mewakili entri direktori.

Menyatukan semuanya, berikut adalah cara Anda mendapatkan tanggal saat kata sandi terakhir ditetapkan:

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

Berikut adalah cara mudah untuk menampilkan Komputer AD:

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

Tambahkan fungsi ConvertADSLargeInteger ke skrip Anda, Anda bisa mendapatkannya di sini:

PowerShell: Konversi Active Directory IADSLargeInteger ke System.Int64

Begini cara Anda menggunakannya:

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

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

buka PowerShell

Jalankan perintah berikut:

add-PSSnapin quest.activeroles.admanagement

Get-QADUser | ft displayname, PasswordLastSet

Perintah pertama memuat snapin pencarian yang baru saja Anda unduh. Anda tidak perlu melakukan ini jika Anda menggunakan pintasan untuk mencari di startmenu Anda. Perintah kedua mendapatkan daftar semua dan pengguna dan waktu di sana kata sandi terakhir diubah.

1
baz

mungkin Anda harus melihat menggunakan properti passwordLastChanged. Lihat di sini untuk info lebih lanjut: http://www.Microsoft.com/technet/scriptcenter/resources/qanda/aug06/hey0801.mspx

0
mrTomahawk