शक्तियों: मैं कैसे pwdLastSet क्वेरी और यह समझ में आता है?


17

मुझे सक्रिय निर्देशिका सुरक्षा समूह में खाते के समूह के लिए अंतिम पासवर्ड परिवर्तन प्राप्त करने की आवश्यकता है, और मुझे लगता है कि ऐसा कुछ है PowerShell कुछ अच्छा होना चाहिए।

अभी, मैं पहले से ही अटका हुआ हूं कि मैं जिस AD खाते को देख रहा हूं, उससे pwdLastSet विशेषता कैसे पढ़ें। यहां तक ​​कि इस तरह से कुछ सरल चलाना:

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

pwdLastSet के परिणाम देता है जो इस तरह दिखाई देता है:

pwdLastSet            : {System.__ComObject}

मुझे लगता है कि मैं इसके बारे में गलत तरीके से जा रहा हूं, इसलिए pwdLastSet विशेषता के आउटपुट (फिर मूल्य विंडोज एपोच पर आधारित है और बहुत मानवीय पठनीय नहीं है) का सबसे अच्छा तरीका क्या है?

जवाबों:


13

आप इसे स्नैप-इन के बिना भी कर सकते हैं। मैंने यह कोशिश की और यह काम किया:

PS #> $ खोजकर्ता = नई-वस्तु DirectoryServices.DirectorySearcher
PS #> $ खोजकर्ता। फ़िल्टर = "(((samaccountname = user1))"
PS #> $ परिणाम = $ searcher.findone ()
PS #> [डेटाटाइम] :: fromfiletime ($ results.properties.pwdlastset [0])

बुधवार, 10 जून, 2009 4:32:08 अपराह्न

मुझे एक सिस्टम भी मिलता है। pwdLastSet के लिए। ComObject यदि मेरे पास उपयोगकर्ता ऑब्जेक्ट इस तरह सेट है:
$ user = [adsi] "LDAP: // cn = user1, ou = Staff, ou = उपयोगकर्ता खाते, dc = ramalamadingdong, dc = net "

$ उपयोगकर्ता ऑब्जेक्ट से उस pwdLastSet मान को प्राप्त करने के लिए [System .__ ComObject] .InvokeMember () और प्रतिबिंब का उपयोग करने का एक तरीका होना चाहिए, लेकिन मैं इसे सही से प्राप्त नहीं कर पाया। मैंने कभी इसका पता नहीं लगाया, इसलिए मैंने उपरोक्त उदाहरण का इस्तेमाल किया और आगे बढ़ गया।

यदि आप AD (या Exchange या SQL सर्वर) के साथ बहुत अधिक काम कर रहे हैं, तो आप इसके लिए स्नैपइन प्राप्त कर सकते हैं और इसका उपयोग कर सकते हैं।


1
मैं सिंटैक्स सीखने की कोशिश करने के लिए PowerShell में विभिन्न सरल कार्य करने के लिए एक किक पर गया हूं। मैं थोड़े उदास था कि हर जगह मैंने देखा कि जवाब एक ऐड का उपयोग था। धन्यवाद!
बॉब

19

विंडोज 7 / विंडोज सर्वर 2008 आर 2 के साथ आने वाले इनबिल्ट एडी कमांडलेट अब बस इतना ही कर सकते हैं। Windows 7 पर Powershell प्रॉम्प्ट से:

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

"PasswordLastSet" एट्रीब्यूट वास्तविक "pwdLastSet" विशेषता का अनुवादित संस्करण प्रतीत होता है।


बस जिज्ञासु का मतलब है कि पासवर्डसेस्टसेट के लिए किसी भी मूल्य का अनुपस्थिति ... क्या इसका 100% मतलब है कि पासवर्ड को शुरू में सेट करने के बाद से कोई बदलाव नहीं हुआ था?
मिखाइल

मेरे पास इस पर परीक्षण करने के लिए एक बॉक्स नहीं है, लेकिन मुझे लगता है कि यह अधिक संभावना है कि अभी तक ऑब्जेक्ट पर कोई पासवर्ड सेट नहीं किया गया है।
नवब्ये

@Mikhail, PasswordLastSet के लिए किसी भी मूल्य के अधिकांश समय अनुपस्थित का मतलब है कि आप कमांड को एक उन्नत प्रॉम्प्ट में नहीं चलाते हैं।
JPBlanc

3

एक आसान तरीका है।

ADSI ऑब्जेक्ट में ConvertLargeIntegerToInt64 नामक एक विधि है। ध्यान दें कि यह ADSI ऑब्जेक्ट का एक तरीका है और सिस्टम नहीं । \ _ Comobject जो टाइमस्टैम्प एटिब्यूट के मान को क्वेरी करके लौटा है, इसलिए $ user.pwdLastSet.value.ConvertLarge.tegerToInt64 () काम नहीं करेगा। आपको इसे इस प्रकार संलग्न करना होगा:

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

आपको एलडीएपी टाइमस्टैम्प मिलेगा, जिसे ऊपर पढ़ने के लिए एक पठनीय तारीख में बदलना होगा। यह ADSI प्रदाता द्वारा लौटाए गए किसी भी टाइमस्टैम्प विशेषता मान के लिए काम करेगा, और ConvertLargeIntegerToInt64 विधि है (मुझे विश्वास है) एक निर्देशिका प्रविष्टि का प्रतिनिधित्व करने वाली किसी भी वस्तु से उजागर होती है।

यह सब एक साथ रखते हुए, यहां बताया गया है कि पासवर्ड सेट होने पर आपको तारीख कैसे मिलती है:

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

3

AD कंप्यूटर्स प्रदर्शित करने का एक आसान तरीका यहां दिया गया है:

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

1

स्थापित करें: http://www.quest.com/powershell/activeroles-server.aspx

खुली शक्तियां

निम्न आदेश चलाएँ:

add-PSSnapin search.activeroles.admanagement

Get-QADUser | ft displayname, PasswordLastSet

पहला कमांड आपके द्वारा डाउनलोड किए गए खोज स्नैप को लोड करता है। यदि आप शॉर्टकट का उपयोग अपने स्टार्टअप में खोज करने के लिए करते हैं, तो आपको ऐसा करने की आवश्यकता नहीं है। दूसरी कमांड में सभी उपयोगकर्ताओं और उपयोगकर्ताओं की सूची मिलती है और पासवर्ड के अंतिम बार बदलने का समय।


1

ConvertADSLargeInteger फ़ंक्शन को अपनी स्क्रिप्ट में जोड़ें, आप इसे यहां प्राप्त कर सकते हैं:

PowerShell: सक्रिय निर्देशिका IADSLargeInteger को System.Int64 में कनवर्ट करें

यहां बताया गया है कि आप इसका उपयोग कैसे करेंगे:

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.