it-swarm-ru.tech

Powershell: как мне запросить pwdLastSet и имеет ли это смысл?

Мне нужно получить последнее изменение пароля для группы учетных записей в группе безопасности 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?

17
Bob

Вы также можете сделать это без оснастки. Я попробовал это, и это сработало:

 PS #> $ searcher = New-Object DirectoryServices.DirectorySearcher 
 PS #> $ searcher.Filter = "(& (samaccountname = user1))" 
 PS #> $ results = $ searcher.findone () 
 PS #> [datetime] :: fromfiletime ($ results.properties.pwdlastset [0]) 
 
 Среда, 10 июня 2009 г. 4: 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), вы можете получить оснастку и использовать ее.

13
Bratch

Встроенные командлеты AD, которые поставляются с Windows 7/Windows Server 2008 R2, теперь могут делать это достаточно просто. В Windows 7 из командной строки Powershell:

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

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

19
Neobyte

Есть более простой способ.

У объекта ADSI есть метод ConvertLargeIntegerToInt64. Обратите внимание, что это метод объекта ADSI и не System .__ Comobject, который возвращается путем запроса значения атрибута timestamp, поэтому $ 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
Adi Inbar

Вот простой способ отобразить компьютеры AD:

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

Добавьте функцию ConvertADSLargeInteger в ваш скрипт, вы можете получить ее здесь:

PowerShell: преобразование Active Directory IADSLargeInteger в System.Int64

Вот как вы бы это использовали:

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

Установить: http://www.quest.com/powershell/activeroles-server.aspx

открытый PowerShell

Запустите следующие команды:

add-PSSnapin quest.activeroles.admanagement

Get-QADUser | ft отображаемое имя, PasswordLastSet

Первая команда загружает только что загруженный квестовый оснастка. Вам не нужно делать это, если вы используете ярлык для квеста в стартовом меню. Вторая команда получает список всех пользователей и пользователей, а также время последнего изменения пароля.

1
baz

возможно, вам стоит взглянуть на использование свойства passwordLastChanged. Здесь вы найдете дополнительную информацию: http://www.Microsoft.com/technet/scriptcenter/resources/qanda/aug06/hey0801.mspx

0
mrTomahawk