IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Kix : incomprehension [Batch]


Sujet :

Scripts/Batch

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Kix : incomprehension
    Bonjour a tous

    Je viens ici afin d'avoir vos avis sur ce petit bout de code kix qui me pose malgré tout beaucoup de soucis.
    J'ai décidé de réecrire l'ensemble de mon script de login en kix pour une question de rapidité d'exécution / vbs.

    Voila le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    
    break ON
    
    :start
    $UserDN=GetUserDN()
    IF @IPADDRESS0 = "127.  0.  0.  1"
    	$RC = LogEvent(4 , 1004 , "Logon-" + @USERID + "-" + @HOSTNAME + "-" + @IPADDRESS0 + "-" + @LSERVER + "-" + @Address + "-" + @WKSTA ,"","KiXtart")
    ELSE
    	$RC = LogEvent(4 , 1004 , "Logon: " + @USERID + " on " + @WKSTA + " (" + @IPADDRESS0 + ") at " + @LSERVER,$logsrv,"KiXtart")
    ENDIF
    
    If Instr($UserDN,"OU=ROS,")<>0
    	$UserOU = "ROS"
    Else
    	If Instr($UserDN,"OU=FON,")<>0
    		$UserOU="FON"
    	Else
    		If Instr($UserDN,"OU=SAR,")<>0
    			$UserOU="SAR"
    		Else
    			If Instr($UserDN,"OU=SAM,")<>0
    				$UserOU="SAR"
    			Else
    				If Instr($UserDN,"OU=LIS,")>0
    					$UserOU="LIS"
    				Else
    					If Instr($UserDN,"OU=LAB,")>0
    						$UserOU="LAB"
    					Else
    						If Instr($UserDN,"OU=REP,")>0
    							$UserOU="REP"
    						Else
    							If Instr($UserDN,"OU=CHA,")>0
    								$UserOU="CHA"
    							EndIf
    						EndIf
    					EndIf
    				EndIf
    			EndIf
    		EndIf
    	EndIf
    EndIf
    
    Select 
    	Case $UserOU="ROS"
    		$FileServeur = "\\fsfrparxxx\"
    		Gosub "Commun"
    		Goto end
    	Case $UserOU="SAR" 
    		$FileServeur = "\\fsfrsarxxx\"
    		Gosub "Commun"
    	Case $UserOU="SAM" 
    		$FileServeur = "\\fsfrsamxxx\"
    		Gosub "Commun"
    	Case $UserOU="FON" 
    		$FileServeur = "\\fsfrfonxxx\"
    		Gosub "Commun"
    	Case $UserOU="LAB" 
    		$FileServeur = "\\fsfrlabxxx\"
    		Gosub "Commun"
    	Case $UserOU="REP" 
    		$FileServeur = "\\fsfrparxxx\"
    		Gosub "Commun"
    	Case $UserOU="CHA" 
    		$FileServeur = "\\fsfrchaxxx\"
    		Gosub "Commun"
    EndSelect
    
    :end
    
    ;*****************************
    ;* Subs                                         *
    ;*****************************
    
    :Commun
    	$Logfile=$FileServeur+"mngt$\"+@userid+".txt"
    	IF Open( 3 , $Logfile , 5 )  = 0
    		$x = WriteLine( 3 , Cstr(@MDAYNO) + '/' + Cstr(@MONTHNO) + '/' + Cstr(@YEAR) + ";" + @TIME + ";" + @WKSTA + ";" + @LSERVER + ";" + $UserDN + @CRLF)
    	Endif
    	If Left (Ucase(@WKSTA), 2)="LT" or Left (Ucase(@WKSTA), 2)="DT"
    		Shell "cscript.exe \\xxx.net\SysVol\xxx.net\Scripts\Fr\various.vbs"
    	Endif
    Return
    
    :end
    
    ;******************************
    ;* Functions                                     *
    ;******************************
    Function getUserDN(optional $username)
    	Dim $objTrans
    	if $username=""
    		$username=@ldomain + "\"+ @userid
    	endif
    	if not instr($username,"\")
    		$username=@ldomain + "\" + $username
    	endif
    	$objTrans = CreateObject("NameTranslate")
    	if @error
    		exit @error
    	else
    		$objTrans.Init(3, "")
    		$objTrans.Set(3,$username)
    		$getUserDN = $objTrans.Get(1)
    		if @error
    			exit @error
    		endif
    	endif
    EndFunction
    Le soucis me direz vous ? et bien le script vbs que j'appelle s'execute deux fois, alors qu'il n'y a pas de boucle dans ce code.
    D'après la doc Kix, apres l'execution d'une sub, le retour se fait juste apres la sub, donc ici cela devrait etre un Goto end.

    Si vous avez des idées je suis preneur.

    Par ailleurs en remplaçant les Sub par des functions le probleme disparait.....


    merci

  2. #2
    Membre éprouvé Avatar de gretch
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2006
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 165
    Points : 1 250
    Points
    1 250
    Par défaut
    essaie en ajoutant ligne 84 un

  3. #3
    Candidat au Club
    Inscrit en
    Septembre 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par gretch Voir le message
    essaie en ajoutant ligne 84 un
    Hello

    Merci pour ce retour rapide.
    Malheureusement ca ne resoud pas le soucis.
    Strange n'est ce pas ? ^^

  4. #4
    Membre éprouvé Avatar de gretch
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2006
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 165
    Points : 1 250
    Points
    1 250
    Par défaut
    j'ai remarqué que tu avais plusieurs etiquettes :end
    vérifie si cela ne vient pas de là...

  5. #5
    Candidat au Club
    Inscrit en
    Septembre 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Hello

    En effet il y avait une erreur de frappe mais cela ne change pas le résultat
    Dommage

  6. #6
    Candidat au Club
    Inscrit en
    Septembre 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    J'ajouterais meme qu'en réduisant au minimum le script pour tester, le resultat est identique. Le vbs est lancé deux fois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    break ON
    
    Gosub Commun
    ? " Fin de script"
    :end
    
    ;****************************************************************************************
    ;* Subs                                                                                 *
    ;****************************************************************************************
    
    :Commun
    		Shell "cscript.exe \\xxx.net\SysVol\xxx.net\Scripts\Fr\various.vbs"
    Return
    Par contre si je remplace GOSUB par GOTO il n'est lancé qu'une fois mais ne revient pas executer la commande apres le goto ce qu'est sensé faire le gosub

    Alors soit je comprends mal la doc du gosub soit ca sent le bug ....

    Edit : ca sent le bug du gosub cumulé au SHELL car ce code tout bete fonctionne parfaitement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ? "This demonstrates calling a subroutine"
    GOSUB "Demo"
    ? "End of demonstration…"
    EXIT 1
    :Demo
    ? "We are in the subroutine now…"
    RETURN
    Le résultat donne bien un seul passage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    This demonstrates calling a subroutine
    We are in the subroutine now.
    End of demonstration.

  7. #7
    Membre émérite Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Points : 2 453
    Points
    2 453
    Par défaut
    Sur ton dernier script minimal ça me choque pas que ce soit lancé deux fois.

    Ton script exécute le call et ensuite revient ou il en était, passe l'étiquette :end et continue tranquillement vers l'étiquette :commun et ré-éxecute le script.

    Dans l'exemple qui fonctionne tu vois bien qu'il y a un EXIT 1 entre la procédure principale et la sub-routine.
    Je ne réponds pas aux questions techniques par MP, le forum est là pour cela.

    La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber.

    (\ _ /)
    (='.'=)
    Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant

  8. #8
    Candidat au Club
    Inscrit en
    Septembre 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Drizzt [Drone38] Voir le message
    Sur ton dernier script minimal ça me choque pas que ce soit lancé deux fois.

    Ton script exécute le call et ensuite revient ou il en était, passe l'étiquette :end et continue tranquillement vers l'étiquette :commun et ré-éxecute le script.

    Dans l'exemple qui fonctionne tu vois bien qu'il y a un EXIT 1 entre la procédure principale et la sub-routine.
    Bon sang mais c'est bien sur !!!

    Merci Drizzt.
    Je partais du principe que Kix s'executait sur le meme principe que VBS et donc qu'un e sub n'etait executé que des l'instant ou elle est appelée. J'avais pris pour habitude de cloquer toute mes subs et functions en bas de mes scripts quelqu'ils soient.

    Du coup il faut effectivement que je rajoute un exit ou que je mette l'etiquette end a la toute fin de la page aevc un goto end.

    Je comprends mieux ! Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JSP]probleme incomprehensible
    Par ujoodha dans le forum Servlets/JSP
    Réponses: 13
    Dernier message: 22/03/2005, 16h54
  2. Réponses: 2
    Dernier message: 09/03/2005, 14h35
  3. code incomprehensible (3 lignes) : template, typename
    Par xavlours dans le forum Langage
    Réponses: 7
    Dernier message: 25/02/2005, 14h45
  4. [String] Probleme incomprehensible avec split
    Par scorpiwolf dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 20/07/2004, 21h21
  5. [langage] Erreur incomprehensible!!!!!
    Par sali dans le forum Langage
    Réponses: 4
    Dernier message: 08/05/2004, 20h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo