Question Comparer user et computer dans active directory

Plus d'informations
il y a 10 ans 8 mois #20500 par Fred
Voila l'image en pdf

La pièce jointe capture-ee4fa61f5822115ce4c6cdb76ec4cf8b.pdf est absente ou indisponible

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

Plus d'informations
il y a 10 ans 8 mois #20502 par Fred
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

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

Plus d'informations
il y a 10 ans 8 mois #20503 par Laurent Dardenne
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]

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 8 mois #20505 par Fred
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.

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

Plus d'informations
il y a 10 ans 8 mois #20506 par Laurent Dardenne
fred31200 écrit:

non non !! justement tu supposais bien ... dans le pdf que je t'ai envoyé effectivement $description=$username seulement c'était pour juste pour tester

:blink:
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.

Plus d'informations
il y a 10 ans 8 mois #20512 par Fred
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.

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

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