Может ли кто-нибудь обнаружить ошибку в команде Powershell, пытающейся извлечь pwdLastSet из Active Directory для некоторых пользователей ?
Для некоторых учетных записей это работает:
PS C:\> get-aduser -filter "name -like 'Admin*'" -Properties pwdLastSet | Select -first 1 name,pwdLastSet | format-list
name : Administrator
pwdLastSet : 131254235816382539
Для некоторых нет:
PS C:\> get-aduser -filter "name -like 'G*Ol*'" -Properties pwdLastSet | Select -first 1 name,pwdLastSet | format-list
name : Grzegorz Olędzki
pwdLastSet :
На что следует обратить внимание, что свойство, кажется, установлено при получении из графического интерфейса:
проблема постоянно затрагивает несколько учетных записей, поэтому я подозреваю, что есть что-то, чего я просто не понимаю.
Дважды проверьте и убедитесь, что вы используете PowerShell от имени администратора. Эта проблема может возникнуть, если у вашего экземпляра нет повышенных прав, поскольку некоторые политики паролей (GPO), вероятно, скрыты.
Вот функция, которую вы можете использовать для тестирования:
function Get-PwdLastSet {
param(
[parameter(Mandatory=$true)] [String] $sAMAccountName
)
$searcher = [ADSISearcher] "(&(pwdLastSet=*)(sAMAccountName=$sAMAccountName))"
$searcher.PropertiesToLoad.AddRange(@("pwdLastSet","sAMAccountName"))
$searchResult = $searcher.FindOne()
if ( $searchResult ) {
$pwdLastSet = $searchResult.Properties["pwdlastset"][0]
if ( $pwdLastSet -gt 0 ) {
[DateTime]::FromFileTime($pwdLastSet)
}
else {
"Password is expired"
}
}
}
Если этот скрипт не может прочитать атрибут pwdLastSet
, единственное объяснение, которое я могу придумать, это то, что пользователь при выполнении сценария отсутствует разрешение на чтение этого атрибута из Active Directory. AFAIK, этот атрибут должен быть доступен для чтения по умолчанию для всех членов пользователей домена
, поэтому может быть так, что разрешения объекта Active Directory были изменены с значений по умолчанию.