Question [Résolu] Problème comptage AD si égal à 1

Plus d'informations
il y a 8 ans 6 mois #24486 par Guillaume
Bonjour à tous !

Je ne vais pas expliquer le cheminement tordu qui m'a amené jusque là mais j'aurai voulu voir avec vous (si quelqu'un peut tester sur son AD) un souci que je rencontre.

J'effectue une requête simple que je mets dans une variable et je veux le nombre de résultat.

[code:1]$Test = Get-ADUser -Filter {(sAMAccountName -like 'g.f*')} -Properties * ; $Test.Count[/code:1]
J'obtiens 2. C'est juste !

[code:1]$Test = Get-ADUser -Filter {(sAMAccountName -like 'g.fe*')} -Properties * ; $Test.Count[/code:1]
J'obtiens 0. C'est juste aussi !

[code:1]$Test = Get-ADUser -Filter {(sAMAccountName -like 'g.fo*')} -Properties * ; $Test.Count[/code:1]
Je n'obtiens rien, même pas 0. En réalité, le nombre devrait être égal à 1. Visiblement, il est égal à \"Null\".

J'ai d'autres tests dont le résultat doit être \"1\". Je n'obtiens rien.

Ma demande est donc si quelqu'un pouvait faire un test d'une requête utilisateur (ou ordinateur ça le fait aussi...) qui soit égal à 1 et afficher la quantité.

Par contre, si on ne met rien dans une variable et que je fais juste
[code:1]Get-ADUser -Filter {(sAMAccountName -like 'g.fo*')} -Properties *[/code:1]
Les informations du compte apparaissent bien. C'est le comptage dans une variable à quantité 1 qui pose souci.

Merci par avance !<br><br>Message édité par: Guillaume_F, à: 8/11/17 12:46

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 6 mois #24488 par Philippe
bonjour Guillaume_F

d'abord avant de te répondre, je voulais te dire d'évité de récupéré toutes les propriétés quand tu fais une requête dans l'AD si tu en n'a pas besoin (le -Properties *)
ça prend tu beaucoup de temps et d'espace mémoire dans ton script
et surtout tu charge ton serveur AD pour rien, si bien sur tu n'a pas besoin de toutes les propriétés !

un petit truc en plus, évite l'écriture sur une ligne, c'est courant sous linux mais réduit la lisibilité tu script


pour ton problème très courant, les objets PowerShell ne contienne pas de propriété count quand il n'y a qu'un seul élément dans l'objet ! :(
donc pas très pratique pour compter !
plusieurs solution existe
en voici une :

[code:1]$Test = [Microsoft.ActiveDirectory.Management.ADUser[]](Get-ADUser -Filter {(sAMAccountName -like \&quot;g.fo*\&quot;«»)})
$Test.Count
[/code:1]on force PowerShell a créé un tableau d'objet
il va donc créé la propriété count même si il n'y a qu'un seul élément dans l'objet
c'est ce que fais [Microsoft.ActiveDirectory.Management.ADUser[]] en particulier le double crochet à la fin []

tu trouver le type d'objet par :
[code:1](Get-ADUser -Filter {(sAMAccountName -like \&quot;g.fo*\&quot;«»)}).gettype()[/code:1]
ou par
[code:1]Get-ADUser -Filter {(sAMAccountName -like \&quot;g.fo*\&quot;«»)} | Get-Member[/code:1]sur la première ligne renvoyer

Message édité par: 6ratgus, à: 8/11/17 10:17<br><br>Message édité par: 6ratgus, à: 8/11/17 10:17

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 6 mois #24490 par Guillaume
Pour \&quot;-Properties *\&quot;, j'avais effectivement dû faire ça pour les tests et je n'ai pas affiné par la suite. Je change ça ;)

Pour cette histoire de Count si le résultat est à 1, je n'aurai jamais trouvé... Et effectivement, avec ta solution ça marche nickel. Je vais modifier tout ça.

Merci beaucoup ! :)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 6 mois #24508 par Guillaume
Petite question supplémentaire :

Je veux rajouter des informations, type \&quot;AccountExpirationDate\&quot;.

Quand je veux utiliser \&quot;Export-csv\&quot;, je me retrouve avec le \&quot;SamAccountName\&quot; correct mais pour \&quot;AccountExpirationDate\&quot;, j'ai \&quot;Microsoft.ActiveDirectory.Management.ADPropertyValueCollection\&quot;...

Du coup, j'utilise la requête classique sans [Microsoft.ActiveDirectory.Management.ADUser[]] pour exporter et la requête modifiée juste pour compter.

Est-ce qu'il y a un moyen plus simple ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 6 mois #24516 par Philippe

Quand je veux utiliser \&quot;Export-csv\&quot;, je me retrouve avec le \&quot;SamAccountName\&quot; correct mais pour \&quot;AccountExpirationDate\&quot;, j'ai \&quot;Microsoft.ActiveDirectory.Management.ADPropertyValueCollection\&quot;...

je viens de faire le test et j'ai pas le probleme !?! :blink: :whistle:

peut tu me dire comment tu fais ton export

petite info :
par défaut get-aduser ne renvoie pas l'attribut AccountExpirationDate
il faut lui précisé dans Properties

par contre get-aduser renvoie tous ces attributs :
\&quot;DistinguishedName\&quot;,\&quot;Enabled\&quot;,\&quot;GivenName\&quot;,\&quot;Name\&quot;,\&quot;ObjectClass\&quot;,\&quot;ObjectGUID\&quot;,\&quot;PSShowComputerName\&quot;,\&quot;SamAccountName\&quot;,\&quot;SID\&quot;,\&quot;Surname\&quot;,\&quot;UserPrincipalName\&quot;,\&quot;WriteDebugStream\&quot;,\&quot;WriteErrorStream\&quot;,\&quot;WriteInformationStream\&quot;,\&quot;WriteVerboseStream\&quot;,\&quot;WriteWarningStream\&quot;
certains sont utile d'autre non, et parfois t'afficher des ADPropertyValueCollection ou autre qui indique qu'il y a plusieur valeur dans l'attributs et que export-csv ne sais pas les convertir !
quand tu va faire l'export tous ces attributs vont être écrit dans ton fichier, il faut donc choisir les attributs dont ta besoin avec un select
un exemple :
[code:1]$test = [Microsoft.ActiveDirectory.Management.ADUser[]](Get-ADUser -Filter {(sAMAccountName -like \&quot;co*\&quot;«»)} -Properties AccountExpirationDate)
$test | ft
$test.count

$test | select DistinguishedName, Name, SamAccountName, AccountExpirationDate | Export-Csv 'C:\test.txt'[/code:1]

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 6 mois #24525 par Guillaume
Voici ce que ça donne :

[code:1]$SO_Afficher_Liste_Sup = [Microsoft.ActiveDirectory.Management.ADComputer[]](Get-ADComputer -Server $SO_DC -Filter {(comment -eq \&quot;Supprimable\&quot;«»)} -Properties Cn, LastLogonDate | Select Cn, LastLogonDate | Sort LastLogonDate)

$SO_Afficher_Liste_Sup | Export-Csv -Path \&quot;\\Chemin_reseau\ordinateurs2.csv\&quot; -NoTypeInformation[/code:1]

Et j'obtiens :

Cn,\&quot;LastLogonDate\&quot;
Microsoft.ActiveDirectory.Management.ADPropertyValueCollection,\&quot;Microsoft.ActiveDirectory.Management.ADPropertyValueCollection\&quot;
Microsoft.ActiveDirectory.Management.ADPropertyValueCollection,\&quot;Microsoft.ActiveDirectory.Management.ADPropertyValueCollection\&quot;
Microsoft.ActiveDirectory.Management.ADPropertyValueCollection,\&quot;Microsoft.ActiveDirectory.Management.ADPropertyValueCollection\&quot;


Qu'est-ce que je fais mal ?

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.042 secondes
Propulsé par Kunena