6 votes

Powershell ne parvient pas à récupérer pwdLastSet dans Active Directory

Quelqu'un peut-il repérer une erreur dans la commande Powershell qui tente d'extraire pwdLastSet d'Active Directory pour certains utilisateurs ?

Pour certains comptes, cela fonctionne :

PS C:\> get-aduser -filter "name -like 'Admin*'" -Properties pwdLastSet | Select -first 1 name,pwdLastSet  | format-list

name       : Administrator
pwdLastSet : 131254235816382539

Pour certains, ce n'est pas le cas :

PS C:\> get-aduser -filter "name -like 'G*Ol*'" -Properties pwdLastSet | Select -first 1 name,pwdLastSet  | format-list

name       : Grzegorz Oledzki
pwdLastSet :

Ce qu'il faut noter, c'est que la propriété semble être définie lorsqu'elle est récupérée à partir de l'interface graphique : Properties dialog of the same user

Le problème affecte systématiquement plusieurs comptes, je soupçonne donc qu'il y a quelque chose que je ne comprends pas.

1 votes

Exécutez-vous powershell en tant qu'administrateur ? Cela peut arriver si votre instance n'est pas élevée. Certaines politiques de mot de passe vous sont probablement cachées (GPO).

0 votes

@Colyn1337 - vous êtes un génie ! J'étais connecté en tant que compte administrateur, mais ce qui manquait c'est "Exécuter en tant qu'administrateur" lors de l'ouverture de la fenêtre powershell ! Je vous suggère de mettre cela comme réponse, car cela résout vraiment le problème.

1 votes

Je suis pratiquement sûr que l'élévation locale n'a rien à voir avec l'interrogation d'AD - en tout cas, je ne trouve aucune référence à ce sujet. Cette "solution" est peut-être un faux-fuyant.

5voto

Colyn1337 Points 2367

Vérifiez et assurez-vous que vous exécutez powershell en tant qu'administrateur. Ce problème peut se produire si votre instance n'est pas élevée car certaines stratégies de mot de passe (GPO) sont probablement cachées.

0 votes

Pouvez-vous préciser comment cet attribut pourrait ne pas être lisible par un utilisateur de domaine (j'ai testé la lecture de cet attribut en utilisant un utilisateur de domaine standard et cela a bien fonctionné).

0 votes

@Bill_Stewart. Juste pour clarifier, je n'ai pas essayé avec un utilisateur de domaine standard, mais la suggestion réelle qui m'a aidé était d'exécuter powershell avec l'option "Run as administrator". Mais en étant connecté à Windows avec le même compte de domaine. Évidemment, votre demande d'informations supplémentaires est parfaitement valable.

0 votes

Je ne peux pas reproduire avec un utilisateur non élevé. Je peux toujours lire l'attribut. L'élévation locale ne devrait avoir aucun effet sur le problème (car vous lisez un attribut à partir d'AD, et l'élévation n'affecte que l'ordinateur local).

2voto

Lev1Athan Points 1

Si la valeur de pwdLastSet est nulle/blanche, cela signifie que l'utilisateur doit changer son mot de passe à la prochaine connexion. Si vous décochez la case dans les propriétés de l'utilisateur, vous obtiendrez une date.

-1voto

Bill_Stewart Points 258

Voici une fonction que vous pouvez utiliser pour tester :

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"
    }
  }
}

Si ce script n'arrive pas à lire le fichier pwdLastSet la seule explication à laquelle je peux penser est que l'utilisateur qui exécute le script n'a pas la permission de lire cet attribut dans Active Directory. D'après l'AFAIK, cet attribut devrait être lisible par défaut pour tous les membres de Domain Users Il se peut donc que les permissions des objets Active Directory aient été modifiées par rapport aux valeurs par défaut.

3 votes

Merci de votre aide. Mais je ne suis pas sûr que cela réponde au problème. La fonction ne renvoie simplement rien pour les comptes défectueux, et une date (comme prévu) pour les "bons" comptes : pastebin.com/vMMVvsvs

0 votes

D'abord, n'utilisez pas de parenthèses ( ) pour appeler des fonctions dans PowerShell (c'est valable d'un point de vue syntaxique mais faux d'un point de vue sémantique). La façon correcte d'exécuter la fonction est juste Get-PwdLastSet grz . Ensuite, parcourez la fonction dans le débogueur ISE et voyez 1) si la fonction $searchResult est remplie, et 2) quelle est la valeur de la variable $pwdLastSet La variable est définie comme ( $null ?).

0 votes

Merci pour l'astuce. J'ai fait une question séparée pour couvrir cela : serverfault.com/q/819763/32017 . Je pense connaître la réponse maintenant, mais n'hésitez pas à fournir votre explication. J'apprécie votre aide. C'est ainsi que j'apprends. Super !

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X