Мне нужно получить последнее изменение пароля для группы учетных записей в группе безопасности 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?
Вы также можете сделать это без оснастки. Я попробовал это, и это сработало:
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), вы можете получить оснастку и использовать ее.
Встроенные командлеты AD, которые поставляются с Windows 7/Windows Server 2008 R2, теперь могут делать это достаточно просто. В Windows 7 из командной строки Powershell:
Import-Module ActiveDirectory
Get-ADUser 'user1' -properties PasswordLastSet | Format-List
Атрибут "PasswordLastSet" является переведенной версией фактического атрибута "pwdLastSet".
Есть более простой способ.
У объекта 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))
Вот простой способ отобразить компьютеры AD:
Get-ADComputer -Filter * -Properties name,LastLogonDate,PasswordLastSet,modified,modifyTimeStamp |
FT Name,DNSHostName,LastLogonDate,PasswordLastSet,modified,modifyTimeStamp |
Out-File Computers.csv
Добавьте функцию 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))
Установить: http://www.quest.com/powershell/activeroles-server.aspx
открытый PowerShell
Запустите следующие команды:
add-PSSnapin quest.activeroles.admanagement
Get-QADUser | ft отображаемое имя, PasswordLastSet
Первая команда загружает только что загруженный квестовый оснастка. Вам не нужно делать это, если вы используете ярлык для квеста в стартовом меню. Вторая команда получает список всех пользователей и пользователей, а также время последнего изменения пароля.
возможно, вам стоит взглянуть на использование свойства passwordLastChanged. Здесь вы найдете дополнительную информацию: http://www.Microsoft.com/technet/scriptcenter/resources/qanda/aug06/hey0801.mspx