2017-06-26 2 views
1

Je veux imprimer les valeurs du dernier mot de passe en utilisant l'attribut "paswordLastSet". Après la mise en œuvre des filtres comme suit:Comment filtrer la valeur 1/1/1601 1:00:00 AM du dernier mot de passe?

$passwordLS = $user.Properties.Item("pwdLastSet")[0] 

if($passwordLS -eq 0) 
    {   
     $value = "No password last set" 
    } 
    else 
    { 
     $value = [DateTime]::FromFileTime($passwordLS) 
    } 

Et je suis une sortie:

No password last set 
2/26/2003 12:21 
11/27/2003 11:30 
11/27/2003 11:30 
1/1/1601 1:00:00 AM 
................. 

Comme indiqué ci-dessus, il y a une valeur « 1/1/1601 1:00:00 AM » qui signifie que l'utilisateur n'a jamais défini son mot de passe. Mais, je ne veux pas prendre cette valeur comme mes données. J'aimerais filtrer dehors avec "aucun mot de passe dernier ensemble" au lieu de me donner "1/1/1601 1:00:00 AM" comme une sortie.

J'ai étudié ce problème pour trouver un élément qui pourrait m'aider à filtrer "1/1/1601 1:00:00 AM", même si j'ai essayé d'imprimer toutes les valeurs de 100 nanosecondes pour obtenir la valeur mutuelle pour ça. Malheureusement, tout est différent les uns des autres.

je aussi faire une déclaration:

if($passwordLS -eq 0) 
    {   
     $value = "No password last set" 
    } 
    else 
    { 
     $value = [DateTime]::FromFileTime($passwordLS) 
     if($value -eq "1/1/1601 1:00:00 AM"){ 

       $value = "No password last set"  
     } 
     else{  
       $value = $value 
     } 
    }  

Mais je pense que ce n'est pas un code décent. Une meilleure expérience?

Répondre

1

La raison pour laquelle cela ne fonctionne pas parce que vous comparez l'objet datetime$value à la chaîne "1/1/1601 1:00:00 AM"

Vous avez beaucoup d'options - par exemple:

  • Comparer $value-[datetime] objet - par exemple $("1/1/1601 01:00:00" | Get-Date)
  • Exclure en fonction de l'année, sans se préoccuper de la réinitialisation des informations de date.

Le paramètre Else$value = $value est redondant.

code:

if($passwordLS -eq 0) 
    {   
     $value = "No password last set" 
    } 
    else 
    { 
     $value = [DateTime]::FromFileTime($passwordLS) 
     if($value.Year -eq 1601){       # this one 
     if($value -eq $("1/1/1601 01:00:00" | Get-Date)){ # or this one 
       $value = "No password last set"  
     } 

    } 
+1

Merci beaucoup pour votre aide. En fait, en ce qui concerne ma connaissance de Powershell. Je pense que je compare String à String. Parce que vous pouvez voir ** $ passwordLS = $ user.Properties.Item ("pwdLastSet") [0] ** est déjà initialisé en tant que chaîne avec [0] à la fin ?. Hmm, je ne suis pas sûr d'avoir raison ou pas mais ça marche dans ce cas. Pouvez-vous m'aider à nettoyer cela? quel est le but de [0]? – Ender

+1

@Ender Np. '[0]' est utilisé pour indexer dans un tableau, renvoyant le 1er élément. '$ passwordLS' est (je crois) une chaîne, mais' $ value' est certainement 'datetime' et c'est celui qui est comparé à' "1/1/1601 1:00:00 AM" '. Vous pouvez voir que '$ value' est' datetime' en exécutant '$ value.GetType()' ou en vérifiant [la documentation de DateTime.FromFileTime] (https://msdn.microsoft.com/fr-fr/library/system .datetime.fromfiletime (v = vs.110) .aspx) – gms0ulman

+1

Oh mes mots, d'accord ... c'était trop hâtif dans ce cas. Je l'ai. Mon mauvais .. Btw, Tks tellement pour votre aide, je l'ai fonctionné maintenant: D. bonne journée! – Ender