Powershell: Làm thế nào để tôi truy vấn pwdLastSet và nó có ý nghĩa gì không?


16

Tôi cần nhận được thay đổi mật khẩu cuối cùng cho một nhóm tài khoản trong nhóm bảo mật Active Directory và tôi cảm thấy đây là điều mà PowerShell nên làm.

Ngay bây giờ, tôi đã bị mắc kẹt trong cách đọc thuộc tính pwdLastSet từ tài khoản AD tôi đang xem. Thậm chí chạy một cái gì đó đơn giản như thế này:

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

đưa ra kết quả cho pwdLastSet xuất hiện như thế này:

pwdLastSet            : {System.__ComObject}

Tôi cảm thấy như mình hiểu sai về điều này, vậy cách nào tốt nhất để truy vấn và sau đó định dạng đầu ra (giá trị dựa trên Windows Epoch và không thể đọc được của con người) của thuộc tính pwdLastSet?

Câu trả lời:


13

Bạn cũng có thể làm điều này mà không cần một snap-in. Tôi đã thử điều này và nó đã làm việc:

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

Thứ tư, ngày 10 tháng 6 năm 2009 4:32:08 CH

Tôi cũng nhận được Hệ thống .__ ComObject cho pwdLastSet nếu tôi có đối tượng người dùng được đặt như thế này:
$ user = [adsi] "LDAP: // cn = user1, ou = Staff, ou = Tài khoản người dùng, dc = ramalamadingdong, dc = net "

Cần có một cách để sử dụng [System .__ ComObject] .InvokeMember () và phản chiếu để lấy giá trị pwdLastSet đó từ đối tượng $ user, nhưng tôi chưa thể hiểu đúng. Tôi chưa bao giờ tìm ra nó, vì vậy tôi đã sử dụng ví dụ trên và tiếp tục.

Nếu bạn sẽ làm nhiều việc với AD (hoặc Exchange hoặc SQL Server), bạn có thể muốn lấy snapin cho nó và sử dụng nó.


1
Tôi đã cố gắng thực hiện nhiều tác vụ đơn giản khác nhau trong PowerShell để cố gắng học cú pháp. Tôi hơi thất vọng vì ở mọi nơi tôi nhìn câu trả lời đều sử dụng một bổ trợ. Cảm ơn!
Bob

19

Các lệnh AD sẵn có đi kèm với Windows 7 / Windows Server 2008 R2 giờ đây có thể thực hiện việc này một cách đơn giản. Trên Windows 7 từ dấu nhắc Powershell:

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

Thuộc tính "PasswordLastSet" dường như là phiên bản dịch của thuộc tính "pwdLastSet" thực tế.


Chỉ tò mò điều gì có nghĩa là sự vắng mặt của bất kỳ giá trị nào đối với PasswordLastSet ... Điều đó có nghĩa là 100% không có thay đổi vì mật khẩu được đặt ban đầu?
Mikhail

Tôi không có hộp để kiểm tra, nhưng tôi nghĩ nhiều khả năng chưa có mật khẩu nào được đặt trên đối tượng.
Neobyte

@Mikhail, hầu hết thời gian vắng mặt của bất kỳ giá trị nào cho PasswordLastSet có nghĩa là bạn không chạy lệnh trong một dấu nhắc nâng cao.
JPBlanc

3

Có một cách dễ dàng hơn.

Đối tượng ADSI có một phương thức gọi là ConvertLargeIntegerToInt64. Lưu ý rằng đó là phương thức của đối tượng ADSI chứ không phải Hệ thống .__ Comobject được trả về bằng cách truy vấn giá trị của dấu thời gian, vì vậy $ user.pwdLastSet.value.ConvertLargeIntegerToInt64 () sẽ không hoạt động. Bạn cần phải gọi nó như sau:

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

Điều đó sẽ giúp bạn có dấu thời gian LDAP, cần được chuyển đổi thành ngày có thể đọc được, như được giải thích bởi Bratch ở trên. Điều này sẽ hoạt động đối với bất kỳ giá trị thuộc tính dấu thời gian nào được cung cấp bởi nhà cung cấp ADSI và phương thức ConvertLargeIntegerToInt64 được (tôi tin) thể hiện bởi bất kỳ đối tượng nào đại diện cho một mục nhập thư mục.

Đặt tất cả lại với nhau, đây là cách bạn có được ngày khi mật khẩu được đặt lần cuối:

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

3

Đây là một cách dễ dàng để hiển thị Máy tính AD:

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

1

Cài đặt: http://www.quest.com/powershell/activeroles-server.aspx

quyền hạn mở

Chạy các lệnh sau:

add-PSSnapin Quest.activeroles.adman Management

Get-QADUser | ft displayname, PasswordLastSet

Lệnh đầu tiên tải snapin nhiệm vụ bạn vừa tải xuống. Bạn không cần phải làm điều này nếu bạn sử dụng phím tắt để tìm kiếm trong startmenu của bạn. Lệnh thứ hai nhận được danh sách tất cả và người dùng và thời gian mật khẩu được thay đổi lần cuối.



Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.