Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

faire fonctionner un script VBS de test if user exist

5 réponses
Avatar
Lyes
Bonjour tout le monde

Je voudrais tester l'existence de plusieurs utilisateurs depuis une liste de
plusieurs ligne avec 1 samAccountname par ligne.
Etant mauvais en scripting j'ai tenté faire une compile de plusieurs
morceaux de code trouvés un peu partout mais j'arrive pas à faire tourner
mon chef d'oeuvre.
Quelqu'un peut-il venir à mon secours?

Il s'agit du script ci dssous:

'On error resume next

Const FOR_READING = 1

strUsers="c:\scripting\test\users.txt"

'Read user names from text file.
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(strUsers) Then

Set objTextStream = objFSO.OpenTextFile(strUsers, FOR_READING)

Else
WScript.Echo "Input file " & strUsers & " not found."
WScript.Quit
End If

'Loop through list of user name and perform tasks on each.
Do Until objTextStream.AtEndOfStream
strUser = objTextStream.ReadLine
Wscript.Echo VbCrLf & struser

set oUser = getobject("LDAP://cn=& strUser,OU=Utilisateurs,DC=mydom,DC=com")
wscript.echo koi
if ( err ) then
wscript.echo "no such account: " & strUser
else
wscript.echo "account: " & strUser & " exist"
end if

Loop

objTextStream.Close


Merci de votre aide

Lyes

5 réponses

Avatar
Lotre
Bonjour,

Les commentaires et questions sont dans le script...

cordialement,

HB

' ======================================== ' On error resume next
Const FOR_READING = 1
strUsers="c:scriptingtestusers.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")

If objFSO.FileExists(strUsers) Then
Set objTextStream = objFSO.OpenTextFile( _
strUsers, FOR_READING)
Else
WScript.Echo "Input file " & strUsers & " not found."
WScript.Quit
End If

Do Until objTextStream.AtEndOfStream
strUser = objTextStream.ReadLine
Wscript.Echo VbCrLf & struser

set oUser = getobject("LDAP://cn=& _
strUser,OU=Utilisateurs,DC=mydom,DC=com")

' ======================================= ' l'OU se nomme réellement "Utilisateurs" ?
' Le nom du domaine est "MyDom" ?
' et .... "com" ?

' Quel est réellement le contexte ?
' ( type de domaine, unités d'organisation , ... )
' ======================================== ' ligne à virer :
' wscript.echo koi
' ============== ' La variable koi n'est définie nulle part ...
' et les infos sont dans le test suivant...
' ========================================== if ( err ) then
wscript.echo "no such account: " & strUser
else
wscript.echo "account: " & strUser & " exist"
end if
Loop
objTextStream.Close
===============================================
Avatar
Lyes
Merci HB,

alors en fait l'arborescence LDAP complète est assez longue c'est pour cette
raison que j'ai simplifié avec utilisateurs et Mydom.com.
Ensuite le wscript.echo koi c'était juste pour m'assurer (en plus du retour
sur la sortie standard de la ligne et la colonne posant problème) que le
script bug juste avant cette ligne.
Peut-être aurai-je du écrire wscript.echo "koi" pour qu'il interprète ce mot
comme une chaine de caractère.

Quant au contexte il s'agit d'une forêt AD Full Windows Server 2008 avec 1
domaine racine et 2 domaines enfants.

Merci beaucoup pour le coup de main.

Lyes

"Lotre" wrote:

Bonjour,

Les commentaires et questions sont dans le script...

cordialement,

HB

' ======================================== > ' On error resume next
Const FOR_READING = 1
strUsers="c:scriptingtestusers.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")

If objFSO.FileExists(strUsers) Then
Set objTextStream = objFSO.OpenTextFile( _
strUsers, FOR_READING)
Else
WScript.Echo "Input file " & strUsers & " not found."
WScript.Quit
End If

Do Until objTextStream.AtEndOfStream
strUser = objTextStream.ReadLine
Wscript.Echo VbCrLf & struser

set oUser = getobject("LDAP://cn=& _
strUser,OU=Utilisateurs,DC=mydom,DC=com")

' ======================================= > ' l'OU se nomme réellement "Utilisateurs" ?
' Le nom du domaine est "MyDom" ?
' et .... "com" ?

' Quel est réellement le contexte ?
' ( type de domaine, unités d'organisation , ... )
' ======================================== > ' ligne à virer :
' wscript.echo koi
' ============== > ' La variable koi n'est définie nulle part ...
' et les infos sont dans le test suivant...
' ========================================== > if ( err ) then
wscript.echo "no such account: " & strUser
else
wscript.echo "account: " & strUser & " exist"
end if
Loop
objTextStream.Close
===============================================




Avatar
Lotre
Re,


Lyes wrote:

alors en fait l'arborescence LDAP complète est assez longue c'est
pour cette raison que j'ai simplifié avec utilisateurs et Mydom.com.
Ensuite le wscript.echo koi c'était juste pour m'assurer (en plus du
retour sur la sortie standard de la ligne et la colonne posant
problème) que le script bug juste avant cette ligne.



c'est donc la ligne

set oUser = getobject("LDAP://cn=& _
strUser,OU=Utilisateurs,DC=mydom,DC=com")

qui plante ...

effectivement .. j'avais mal regardé !
strUser n'est pas le nom mais la chaîne qui le contient ...

De plus pour que le traitement de l'erreur soit efficace,
il vaut mieux gérer ça localement...

Essaye ce qui suit ...

J'ai coupé les lignes à la main pour éviter les pb dans le mail ...
j'ai aussi traduit les messages ;o)
=============================================== strUsers="c:scriptingtestusers.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")

If objFSO.FileExists(strUsers) Then
Set objTextStream = objFSO.OpenTextFile( _
strUsers, 1)
Else
WScript.Echo "Le fichier " & _
strUsers & " n'existe pas :o( ."
WScript.Quit
End If

Do Until objTextStream.AtEndOfStream
strUser = objTextStream.ReadLine
Wscript.Echo "traitement de " & strUser

On error resume next
ChLDAP = "LDAP://cn=" & strUser & _
",OU=Utilisateurs,DC=mydom,DC=com"
set oUser = getobject(ChLDAP)
On error goto 0
If ( err ) then
wscript.echo "L'utilisateur " & _
strUser & " n'existe pas :o( "
Else
wscript.echo "L'utilisateur " & _
strUser & " n'existe ;o) "
End if
Loop
objTextStream.Close
Set objFSO=Nothing
Set objTextStream = Nothing
=============================================== Il me semble que cela devrait convenir ...

cordialement,

HB
Avatar
Marc Lognoul [MVP]
Bonjour,

Juste 2 remarques:
1) GetObject retournera toujours une erreur si l'object n'existe pas ou si
il n'est ps accessible à l'utilisateur qui tourne le script. Utiliez une
recherche LDAP avec comme condition samaccountname=%LENOMQUEJECHERCHE% ne
retorunera pas d'erreur mais une propriété recordcount. Si celle-ci est > 0,
alors l'utilisateur existe

2) Utiliser GetObject en faisant usage du distinguished name (cn=...) ne
permet pas de tester le SAM Account Name car le CN et le SAM Account name
peuvent être différents. En outre, le SAM est uniquement pas domain alots
que le CN est unique par container (OU ou autre)

--
Marc Lognoul [MCSE, MCTS, MVP]
Heureux celui qui a pu pénétrer les causes secrètes des choses
Happy is the one who could enter the secret causes of things
Blog EN: http://www.marc-antho-etc.net/blog/
Blog FR: http://www.marc-antho-etc.net/blogfr/

"Lotre" wrote in message
news:
Re,


Lyes wrote:

alors en fait l'arborescence LDAP complète est assez longue c'est
pour cette raison que j'ai simplifié avec utilisateurs et Mydom.com.
Ensuite le wscript.echo koi c'était juste pour m'assurer (en plus du
retour sur la sortie standard de la ligne et la colonne posant
problème) que le script bug juste avant cette ligne.



c'est donc la ligne

set oUser = getobject("LDAP://cn=& _
strUser,OU=Utilisateurs,DC=mydom,DC=com")

qui plante ...

effectivement .. j'avais mal regardé !
strUser n'est pas le nom mais la chaîne qui le contient ...

De plus pour que le traitement de l'erreur soit efficace,
il vaut mieux gérer ça localement...

Essaye ce qui suit ...

J'ai coupé les lignes à la main pour éviter les pb dans le mail ...
j'ai aussi traduit les messages ;o)
=============================================== > strUsers="c:scriptingtestusers.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")

If objFSO.FileExists(strUsers) Then
Set objTextStream = objFSO.OpenTextFile( _
strUsers, 1)
Else
WScript.Echo "Le fichier " & _
strUsers & " n'existe pas :o( ."
WScript.Quit
End If

Do Until objTextStream.AtEndOfStream
strUser = objTextStream.ReadLine
Wscript.Echo "traitement de " & strUser

On error resume next
ChLDAP = "LDAP://cn=" & strUser & _
",OU=Utilisateurs,DC=mydom,DC=com"
set oUser = getobject(ChLDAP)
On error goto 0
If ( err ) then
wscript.echo "L'utilisateur " & _
strUser & " n'existe pas :o( "
Else
wscript.echo "L'utilisateur " & _
strUser & " n'existe ;o) "
End if
Loop
objTextStream.Close
Set objFSO=Nothing
Set objTextStream = Nothing
=============================================== > Il me semble que cela devrait convenir ...

cordialement,

HB


Avatar
Lyes
Bonjour Marc;

Merci pour les explications et et la solution proposée. j'essayerai dès
demain...

Merci aussi à Lotre pour le script que je vais essayer d'adapter avec la
suggestion de Marc.

Lyes

"Marc Lognoul [MVP]" wrote:

Bonjour,

Juste 2 remarques:
1) GetObject retournera toujours une erreur si l'object n'existe pas ou si
il n'est ps accessible à l'utilisateur qui tourne le script. Utiliez une
recherche LDAP avec comme condition samaccountname=%LENOMQUEJECHERCHE% ne
retorunera pas d'erreur mais une propriété recordcount. Si celle-ci est > 0,
alors l'utilisateur existe

2) Utiliser GetObject en faisant usage du distinguished name (cn=...) ne
permet pas de tester le SAM Account Name car le CN et le SAM Account name
peuvent être différents. En outre, le SAM est uniquement pas domain alots
que le CN est unique par container (OU ou autre)

--
Marc Lognoul [MCSE, MCTS, MVP]
Heureux celui qui a pu pénétrer les causes secrètes des choses
Happy is the one who could enter the secret causes of things
Blog EN: http://www.marc-antho-etc.net/blog/
Blog FR: http://www.marc-antho-etc.net/blogfr/

"Lotre" wrote in message
news:
> Re,
>
>
> Lyes wrote:
>
>> alors en fait l'arborescence LDAP complète est assez longue c'est
>> pour cette raison que j'ai simplifié avec utilisateurs et Mydom.com.
>> Ensuite le wscript.echo koi c'était juste pour m'assurer (en plus du
>> retour sur la sortie standard de la ligne et la colonne posant
>> problème) que le script bug juste avant cette ligne.
>
> c'est donc la ligne
>
> set oUser = getobject("LDAP://cn=& _
> strUser,OU=Utilisateurs,DC=mydom,DC=com")
>
> qui plante ...
>
> effectivement .. j'avais mal regardé !
> strUser n'est pas le nom mais la chaîne qui le contient ...
>
> De plus pour que le traitement de l'erreur soit efficace,
> il vaut mieux gérer ça localement...
>
> Essaye ce qui suit ...
>
> J'ai coupé les lignes à la main pour éviter les pb dans le mail ...
> j'ai aussi traduit les messages ;o)
> =============================================== > > strUsers="c:scriptingtestusers.txt"
> Set objFSO = CreateObject("Scripting.FileSystemObject")
>
> If objFSO.FileExists(strUsers) Then
> Set objTextStream = objFSO.OpenTextFile( _
> strUsers, 1)
> Else
> WScript.Echo "Le fichier " & _
> strUsers & " n'existe pas :o( ."
> WScript.Quit
> End If
>
> Do Until objTextStream.AtEndOfStream
> strUser = objTextStream.ReadLine
> Wscript.Echo "traitement de " & strUser
>
> On error resume next
> ChLDAP = "LDAP://cn=" & strUser & _
> ",OU=Utilisateurs,DC=mydom,DC=com"
> set oUser = getobject(ChLDAP)
> On error goto 0
> If ( err ) then
> wscript.echo "L'utilisateur " & _
> strUser & " n'existe pas :o( "
> Else
> wscript.echo "L'utilisateur " & _
> strUser & " n'existe ;o) "
> End if
> Loop
> objTextStream.Close
> Set objFSO=Nothing
> Set objTextStream = Nothing
> =============================================== > > Il me semble que cela devrait convenir ...
>
> cordialement,
>
> HB