Powershell: Як я запитую pwdLastSet і чи має це сенс?


17

Мені потрібно отримати останню зміну пароля для групи облікових записів у групі безпеки Active Directory, і я відчуваю, що це щось із PowerShell.

Зараз я вже застряг у тому, як читати атрибут pwdLastSet з облікового запису AD, на який я дивлюся. Навіть запускаючи щось таке, як це:

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

дає результати для pwdLastSet, які виглядають так:

pwdLastSet            : {System.__ComObject}

Я відчуваю, що я йду про це неправильним шляхом, тож який найкращий спосіб запитувати, а потім форматувати висновок (значення базується на епосі Windows і не дуже читаному для людини) атрибута pwdLastSet?

Відповіді:


13

Ви також можете це зробити без оснащення. Я спробував це, і це спрацювало:

PS #> $ searchcher = Новий об’єкт DirectoryServices.DirectorySearcher
PS #> $ searchcher.Filter = "(& (samaccountname = user1))"
PS #> $ results = $ searchcher.findone ()
PS #> [datetime] :: fromfiletime ($ results.properties.pwdlastset [0])

Середа, 10 червня 2009 р. 16:32:08

Я також отримую System .__ ComObject для pwdLastSet, якщо у мене є такий об’єкт користувача, як такий:
$ user = [adsi] "LDAP: // cn = user1, ou = Staff, ou = Облікові записи користувачів, dc = ramalamadingdong, dc = net "

Потрібно використовувати спосіб [System .__ ComObject] .InvokeMember () та відображення, щоб отримати це значення pwdLastSet від об’єкта $ user, але я не зміг його правильно виправити. Я ніколи цього не розгадував, тому використав наведений вище приклад і продовжував рухатися далі.

Якщо ви збираєтеся багато працювати з AD (або Exchange або SQL Server), можливо, ви захочете отримати оснастку для цього і скористатися цим.


1
Я намагався виконувати різні прості завдання в PowerShell, щоб спробувати вивчити синтаксис. Я був дещо депресивний, що всюди, де я дивився, відповідь використовував надбудову. Спасибі!
Боб

19

Вбудовані командні команди AD, що поставляються з Windows 7 / Windows Server 2008 R2, тепер можуть зробити це досить просто. У Windows 7 із запиту Powershell:

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

Атрибут "PasswordLastSet" представляється перекладеною версією фактичного атрибута "pwdLastSet".


Цікаво, що означає відсутність будь-якого значення для PasswordLastSet ... Чи означає це на 100%, що не було змін, оскільки пароль був встановлений спочатку?
Михайло

У мене немає вікна, щоб перевірити його, але я вважаю, що більш ймовірно, що на об'єкті ще не встановлено жодного пароля.
Необіт

@Mikhail, більша частина часу відсутність будь-якого значення для PasswordLastSet означає, що ви не виконуєте команду в підвищеному запиті.
JPBlanc

3

Є простіший спосіб.

Об'єкт ADSI має метод, який називається ConvertLargeIntegerToInt64. Зауважте, що це метод об’єкта ADSI, а не Система .__ Comobject, який повертається за допомогою запиту значення attibute часової позначки, тому $ user.pwdLastSet.value.ConvertLargeIntegerToInt64 () не працюватиме. Потрібно викликати його так:

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

Це отримає вам часову позначку LDAP, яку потрібно перетворити на читабельну дату, як пояснено в Bratch вище. Це буде працювати для будь-якого значення атрибута часової позначки, поверненого постачальником 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 quest.activeroles.admanagement

Get-QADUser | ft displayname, PasswordLastSet

Перша команда завантажує запит, який ви тільки що завантажили. Цього вам не потрібно робити, якщо ви використовуєте ярлик для квесту у своєму стартовому меню. Друга команда отримує список усіх користувачів та користувачів, а також час останнього зміни пароля.



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.