Question
Comparer user et computer dans active directory
- Fred
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 22
- Remerciements reçus 0
il y a 10 ans 8 mois #20500
par Fred
Réponse de Fred sur le sujet Re:Comparer user et computer dans active directory
Voila l'image en pdf
La pièce jointe capture-ee4fa61f5822115ce4c6cdb76ec4cf8b.pdf est absente ou indisponible
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- Fred
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 22
- Remerciements reçus 0
il y a 10 ans 8 mois #20502
par Fred
Réponse de Fred sur le sujet Re:Comparer user et computer dans active directory
je viens en revanche de tester avec le code suivant :
if (\"$description\".Contains(\"TOLLENEER\")) {Write-Host C'est bon\"} else {Write-Host \"C'est pas bon}
et j'obtient ...\"c'est bon\"
Mon probleme se situe bien dans la récupération de la variable $username
if (\"$description\".Contains(\"TOLLENEER\")) {Write-Host C'est bon\"} else {Write-Host \"C'est pas bon}
et j'obtient ...\"c'est bon\"
Mon probleme se situe bien dans la récupération de la variable $username
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 10 ans 8 mois #20503
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Comparer user et computer dans active directory
Le problème se situe dans l'usage de Out-String :
[code:1]
$Description=New-Object PSObject -property @{Description='MOI Même'}
$Description
$Description.Gettype()
$Description=$Description|Select Description|Out-String
$Description
$Description.Gettype()
$UserName=New-Object PSObject -property @{Name='MOI Même'}
$UserName=$UserName|Select name|Out-String
$isMyComputer=$Description.IndexOf($UserName, [System.StringComparison]::OrdinalIgnoreCase) -gt 0
$isMyComputer
#visu des chaînes
\"$Description.IndexOf($UserName, [System.StringComparison]::OrdinalIgnoreCase) -gt 0\"
[/code:1]
Le contenu n'est pas celui que l'on croit.
Utilisons directement le contenu de la proprièté (Select -Expandproperty) et pas un nouvel objet :
[code:1]
$Description=New-Object PSObject -property @{Description='MOI Même'}
$Description=$Description|Select -Expandproperty Description|Out-String
$UserName=New-Object PSObject -property @{Name='MOI Même'}
$UserName=$UserName|Select -Expandproperty name|Out-String
$isMyComputer=$Description.IndexOf($UserName, [System.StringComparison]::OrdinalIgnoreCase) -gt 0
$isMyComputer
#visu des chaînes
\"$Description.IndexOf($UserName, [System.StringComparison]::OrdinalIgnoreCase) -gt 0\"
[byte[]][char[]]$Description
[/code:1]
On constate que Out-string ajoute un retour chariot( 13+10), ce n'est donc plus la même chaîne.
By by Out-string :
[code:1]
$Description=New-Object PSObject -property @{Description='MOI Même'}
$Description=$Description|Select -Expandproperty Description
$UserName=New-Object PSObject -property @{Name='MOI Même'}
$UserName=$UserName|Select -Expandproperty name
$isMyComputer=$Description.IndexOf($UserName, [System.StringComparison]::OrdinalIgnoreCase) -gt 0
$isMyComputer
#visu des chaînes
\"$Description.IndexOf($UserName, [System.StringComparison]::OrdinalIgnoreCase) -gt 0\"
[/code:1]
Ici je suppose implicitement que les deux propriétés sont du type chaîne.
Ensuite je supposais que le contenu de la description était composé d'un texte ET de $Susername , ce qui fait que dans le dernier exemple l'index est 0 ( ce qui est vrai) mais le test est faux
La règle étant plus simple ($Description = $UserName), on utilise directement l'opérateur d'égalité -EQ
[code:1]
$Description=New-Object PSObject -property @{Description='MOI Même'}
$Description=$Description|Select -Expandproperty Description
$UserName=New-Object PSObject -property @{Name='MOI Même'}
$UserName=$UserName|Select -Expandproperty name
$isMyComputer=$Description -eq $UserName
$isMyComputer
\"'$Description'\"
\"'$Username'\"
[/code:1]
[code:1]
$Description=New-Object PSObject -property @{Description='MOI Même'}
$Description
$Description.Gettype()
$Description=$Description|Select Description|Out-String
$Description
$Description.Gettype()
$UserName=New-Object PSObject -property @{Name='MOI Même'}
$UserName=$UserName|Select name|Out-String
$isMyComputer=$Description.IndexOf($UserName, [System.StringComparison]::OrdinalIgnoreCase) -gt 0
$isMyComputer
#visu des chaînes
\"$Description.IndexOf($UserName, [System.StringComparison]::OrdinalIgnoreCase) -gt 0\"
[/code:1]
Le contenu n'est pas celui que l'on croit.
Utilisons directement le contenu de la proprièté (Select -Expandproperty) et pas un nouvel objet :
[code:1]
$Description=New-Object PSObject -property @{Description='MOI Même'}
$Description=$Description|Select -Expandproperty Description|Out-String
$UserName=New-Object PSObject -property @{Name='MOI Même'}
$UserName=$UserName|Select -Expandproperty name|Out-String
$isMyComputer=$Description.IndexOf($UserName, [System.StringComparison]::OrdinalIgnoreCase) -gt 0
$isMyComputer
#visu des chaînes
\"$Description.IndexOf($UserName, [System.StringComparison]::OrdinalIgnoreCase) -gt 0\"
[byte[]][char[]]$Description
[/code:1]
On constate que Out-string ajoute un retour chariot( 13+10), ce n'est donc plus la même chaîne.
By by Out-string :
[code:1]
$Description=New-Object PSObject -property @{Description='MOI Même'}
$Description=$Description|Select -Expandproperty Description
$UserName=New-Object PSObject -property @{Name='MOI Même'}
$UserName=$UserName|Select -Expandproperty name
$isMyComputer=$Description.IndexOf($UserName, [System.StringComparison]::OrdinalIgnoreCase) -gt 0
$isMyComputer
#visu des chaînes
\"$Description.IndexOf($UserName, [System.StringComparison]::OrdinalIgnoreCase) -gt 0\"
[/code:1]
Ici je suppose implicitement que les deux propriétés sont du type chaîne.
Ensuite je supposais que le contenu de la description était composé d'un texte ET de $Susername , ce qui fait que dans le dernier exemple l'index est 0 ( ce qui est vrai) mais le test est faux
La règle étant plus simple ($Description = $UserName), on utilise directement l'opérateur d'égalité -EQ
[code:1]
$Description=New-Object PSObject -property @{Description='MOI Même'}
$Description=$Description|Select -Expandproperty Description
$UserName=New-Object PSObject -property @{Name='MOI Même'}
$UserName=$UserName|Select -Expandproperty name
$isMyComputer=$Description -eq $UserName
$isMyComputer
\"'$Description'\"
\"'$Username'\"
[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Fred
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 22
- Remerciements reçus 0
il y a 10 ans 8 mois #20505
par Fred
Réponse de Fred sur le sujet Re:Comparer user et computer dans active directory
non non !! justement tu supposais bien ... dans le pdf que je t'ai envoyé effectivement $description=$username seulement c'était pour juste pour tester dans le cas ou mes valeurs sont identiques si ça marchait ... mais le but reste le même ... comparer les 2 chaines.
Je te donne un exemple concret :
$description=Martin Jacques Ordinateur portable
$username=Martin jacques
$isMyComputer=$Description.IndexOf($UserName, [System.StringComparison]::OrdinalIgnoreCase) -gt 0
if ($isMyComputer) {Write-Host \"C'est ok\"} else {Write-Host \"C'est pas ok\"}
Ca devrait me renvoyer \"c'est ok\" mais ce n'est pas le cas ...ça me renvoi \"c'est pas ok\"
Comme si il ne conservait pas le résultat des Get-AD
Alors qu'il me les affiches bien si je tape la commande.
Je te donne un exemple concret :
$description=Martin Jacques Ordinateur portable
$username=Martin jacques
$isMyComputer=$Description.IndexOf($UserName, [System.StringComparison]::OrdinalIgnoreCase) -gt 0
if ($isMyComputer) {Write-Host \"C'est ok\"} else {Write-Host \"C'est pas ok\"}
Ca devrait me renvoyer \"c'est ok\" mais ce n'est pas le cas ...ça me renvoi \"c'est pas ok\"
Comme si il ne conservait pas le résultat des Get-AD
Alors qu'il me les affiches bien si je tape la commande.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 10 ans 8 mois #20506
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Comparer user et computer dans active directory
fred31200 écrit:

Pour s'embrouiller c'est pas mal
Le pb vient du test, si la chaîne recherchée se trouve au début de la description, la méthode renvoie 0.
Il faut le modifier :
[code:1]
$Description.IndexOf($UserName, [System.StringComparison]::OrdinalIgnoreCase) -ne -1
[/code:1]
Il te reste un cas à valider :
[code:1]$username='Martin jacque'[/code:1]
Ici le prénom ne contient pas de S final, mais le test réussi, si tu veux une correspondance complète c'est à dire que 'jacque' est différent de 'jacques' il te faudra utiliser l'opérateur -Match, comme indiqué précédement.
non non !! justement tu supposais bien ... dans le pdf que je t'ai envoyé effectivement $description=$username seulement c'était pour juste pour tester
Pour s'embrouiller c'est pas mal
Le pb vient du test, si la chaîne recherchée se trouve au début de la description, la méthode renvoie 0.
Il faut le modifier :
[code:1]
$Description.IndexOf($UserName, [System.StringComparison]::OrdinalIgnoreCase) -ne -1
[/code:1]
Il te reste un cas à valider :
[code:1]$username='Martin jacque'[/code:1]
Ici le prénom ne contient pas de S final, mais le test réussi, si tu veux une correspondance complète c'est à dire que 'jacque' est différent de 'jacques' il te faudra utiliser l'opérateur -Match, comme indiqué précédement.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Fred
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 22
- Remerciements reçus 0
il y a 10 ans 8 mois #20512
par Fred
Réponse de Fred sur le sujet Re:Comparer user et computer dans active directory
Lol ca y est je suis completement perdu ^^.
J'ai essayé le code suivant :
[code:1]Import-Module ActiveDirectory
$description= Get-ADComputer $env:computername -properties * | select description | out-string
$username= Get-ADUser $env:username -properties * | select Name | out-string
$ismycomputer= $description.IndexOf($username, [System.StringComparison]::OrdinalIgnoreCase) -ne -1[/code:1]
Mais résultat identique :
[code:1]
if ($ismycomputer){Write-Host \"C'est bon\"} else {Write-Host \"C'est pas bon\"}[/code:1]
me renvoit c'est pas bon.
Alors que quand je rentre le nom en dur ca me renvoi c'est bon.
j'ai voulu tester avec ton code New-Object PSObject mais je n'ai pas compris comment l'utiliser pour être honnête.
J'ai essayé le code suivant :
[code:1]Import-Module ActiveDirectory
$description= Get-ADComputer $env:computername -properties * | select description | out-string
$username= Get-ADUser $env:username -properties * | select Name | out-string
$ismycomputer= $description.IndexOf($username, [System.StringComparison]::OrdinalIgnoreCase) -ne -1[/code:1]
Mais résultat identique :
[code:1]
if ($ismycomputer){Write-Host \"C'est bon\"} else {Write-Host \"C'est pas bon\"}[/code:1]
me renvoit c'est pas bon.
Alors que quand je rentre le nom en dur ca me renvoi c'est bon.
j'ai voulu tester avec ton code New-Object PSObject mais je n'ai pas compris comment l'utiliser pour être honnête.
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.053 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Comparer user et computer dans active directory