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

VBScript Discussion :

Problème d'écriture dans un fichier


Sujet :

VBScript

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 79
    Par défaut Problème d'écriture dans un fichier
    Bonjour a tous,

    J'arrive a killer mes process parfaitement. Maintenant je veux creer un fichier log mais j'ai un soucis car il me cree bien le fichier mais n'ecrit rien dedans.

    Voici mon 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
     
     
    Const PID = "_"
    Const terminal = "not_a_TTY"
    Const gravite = "WARNING"
    Const valeur  = "OK"
    Const EVENT_SUCCESS = 0
    Private FSO, FicLog, FicLogBis
     
    main
    sub main()
    Dim NOM_PROCESS
    Dim args
    Set args = WScript.Arguments
    NOM_PROCESS= args(0)
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer 
     
    & "\root\cimv2")
    Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name = '" 
     
    & NOM_PROCESS & "'")
    For Each objProcess in colProcessList
        objProcess.Terminate()
    Next
    end sub
     
    'On instancie l'objet
    Set FSO = CreateObject("Scripting.FileSystemObject")
    On Error Resume Next
     
    'On instancie le fichier texte
    Set Ftxt = FSO.CreateTextFile("D:\Script_test", False)
     
     
    'Creation dy fichier Log
     
                    If Err.Number = 0 Then
                            Set Ftxt = FSO.GetFile("D:\Script_test\SYS_LOG_systeme.log")
                            Set FtxtBis = Ftxt.OpenAsTextStream(8, -2)
                            FtxtBis.writeline (parametre)
                            FtxtBis.Close
                            Set FtxtBis = Nothing
                            Ftxt.Close
                            Set Ftxt = Nothing
                    Else
                            Set Ftxt = 
     
    FSO.CreateTextFile("D:\Script_test\SYS_LOG_systeme.log", False)
                            Set Ftxt = FSO.GetFile("D:\Script_test\SYS_LOG_systeme.log")
                            Set FtxtBis = Ftxt.OpenAsTextStream(8, -2)
                            FtxtBis.writeline (parametre)
                            FtxtBis.Close 'Fermeture
                            Set FtxtBis = Nothing
                            Ftxt.Close
                            Set Ftxt = Nothing
                    End If
                    FSO.Close
                    WScript.Quit(1)
     
    If Err.Number = 0 Then
                    Set Ftxt = FSO.GetFile("D:\production\home\tws\log\SYS_LOG_systeme.log")
                    Set FtxtBis = Ftxt.OpenAsTextStream(8, -2)
                    FtxtBis.writeline (Year(date)) & vbTab & (Month(date)) & vbTab & 
     
    (Day(date)) & vbTab & (time) & vbTab & (getSystemVar("COMPUTERNAME")) & vbTab & resultat1 
     
    & vbTab & resultat2 & vbTab & (PID) & vbTab & (terminal) & vbTab & resultat5 & vbTab & 
     
    resultat4 & vbTab & return & vbTab & (gravite) & vbTab & resultat3 & vbTab & 
     
    (getSystemVar("UNISON_JOBNUM")) & vbTab & (valeur) & vbTab & (message)
                    FtxtBis.Close
                    Set FtxtBis = Nothing
                    Ftxt.Close
                    Set Ftxt = Nothing
            Else
                    Set Ftxt = 
     
    FSO.CreateTextFile("D:\production\home\tws\log\SYS_LOG_systeme.log", False)
                    Set Ftxt = FSO.GetFile("D:\production\home\tws\log\SYS_LOG_systeme.log")
                    Set FtxtBis = Ftxt.OpenAsTextStream(8, -2)
                    FtxtBis.writeline (Year(date)) & vbTab & (Month(date)) & vbTab & 
     
    (Day(date)) & vbTab & (time) & vbTab & (getSystemVar("COMPUTERNAME")) & vbTab & resultat1 
     
    & vbTab & resultat2 & vbTab & (PID) & vbTab & (terminal) & vbTab & resultat5 & vbTab & 
     
    resultat4 & vbTab & return & vbTab & (gravite) & vbTab & resultat3 & vbTab & 
     
    (getSystemVar("UNISON_JOBNUM")) & vbTab & (valeur) & vbTab & (message)
                    FtxtBis.Close 'Fermeture
                    Set FtxtBis = Nothing
                    Ftxt.Close
                    Set Ftxt = Nothing
            End If
    FSO.Close
     
    WSCript.Sleep intSleep
    Merci pour votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 79
    Par défaut
    Hello a tous,

    Personne ne peut m'aider ??

  3. #3
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par lephyrexian Voir le message
    Hello a tous,

    Personne ne peut m'aider ??
    un peu trop "fouilli" ton code ... je ne comprends pas ce que tu fais avec ton Ftxt et ton Ftxtbis

    a priori tu dois pouvoir limiter à une seule ouverture de ton fichier ..

    1/ ouvre ton fichier
    2/ Ecris toutes tes lignes de log
    3/ Ferme ton fichier ...

    essai d'abords avec un log plus simple .. tu rajouteras des lignes ensuite...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 79
    Par défaut
    merci a toi pour ta reponse mais je ne vois vrament pas comme,tu peux faire. Peux tu m'aider en corigeant le code fournit plus haut.

    J'ai vraiment du mal quelq un peuc m aider

    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
     
    Dim NOM_PROCESS
    Dim args
    Set args = WScript.Arguments
    NOM_PROCESS= args(0)
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & 
     
    strComputer & "\root\cimv2")
    Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where 
     
    Name = '" & NOM_PROCESS & "'")
    For Each objProcess in colProcessList
    objProcess.Terminate()
    Next
     
    'On instancie l'objet
    Set FSO = CreateObject("Scripting.FileSystemObject")
    On Error Resume Next
     
    'On instancie le fichier texte
    Set Ftxt = FSO.CreateTextFile("D:\production\home\tws\log\SYS_LOG_systeme.log", 
     
    False)
     
    'On récupère les variables environnement
     
    Function getSystemVar(VarName)
        Dim wss, env
        Set wss = CreateObject("WScript.Shell")
        Set env = wss.environment("process")
        getSystemVar = env(VarName)
    End Function
     
    'On recupere une partie dela chaine de caractere
     
    resultat1 = Mid(getSystemVar("UNISON_SCHED"),2,3)
    resultat2 = Mid(getSystemVar("UNISON_SCHED"),7,3)
    resultat3 = Mid(getSystemVar("UNISON_SCHED"),5,3)
    resultat4 = Mid(getSystemVar("UNISON_JOB"),14,43)
    resultat5 = Mid(getSystemVar("USERNAME"),13.6)
     
    'Creation dy fichier Log
     
            If Err.Number = 0 Then
                    Set Ftxt = FSO.GetFile("D:\Script_test\SYS_LOG_systeme.log")
                    Set FtxtBis = Ftxt.OpenAsTextStream(8, -2)
                    FtxtBis.writeline (Year(date)) & vbTab & (Month(date)) & vbTab & 
     
    (Day(date)) & vbTab & (time) & vbTab & (getSystemVar("COMPUTERNAME")) & vbTab & 
     
    resultat1 & vbTab & resultat2 & vbTab & (PID) & vbTab & (terminal) & vbTab & 
     
    resultat5 & vbTab & resultat4 & vbTab & return & vbTab & (gravite) & vbTab & 
     
    resultat3 & vbTab & (getSystemVar("UNISON_JOBNUM")) & vbTab & (valeur) & vbTab & 
     
    (message)
                    FtxtBis.Close
                    Set FtxtBis = Nothing
                    Ftxt.Close
                    Set Ftxt = Nothing
            Else
                    Set Ftxt = 
     
    FSO.CreateTextFile("D:\Script_test\SYS_LOG_systeme.log", False)
                    Set Ftxt = FSO.GetFile("D:\Script_test\SYS_LOG_systeme.log")
                    Set FtxtBis = Ftxt.OpenAsTextStream(8, -2)
                    FtxtBis.writeline (Year(date)) & vbTab & (Month(date)) & vbTab & 
     
    (Day(date)) & vbTab & (time) & vbTab & (getSystemVar("COMPUTERNAME")) & vbTab & 
     
    resultat1 & vbTab & resultat2 & vbTab & (PID) & vbTab & (terminal) & vbTab & 
     
    resultat5 & vbTab & resultat4 & vbTab & return & vbTab & (gravite) & vbTab & 
     
    resultat3 & vbTab & (getSystemVar("UNISON_JOBNUM")) & vbTab & (valeur) & vbTab & 
     
    (message)
                    FtxtBis.Close 'Fermeture
                    Set FtxtBis = Nothing
                    Ftxt.Close
                    Set Ftxt = Nothing
            End If
    FSO.Close
    J'ai un peux modifier le code mais la je seche completment

    Merci

  5. #5
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Je ne comprends pas trop ce que tu essayes de faire, un exemple de code pour écrire dans un fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set Ftxt = FSO.CreateTextFile("D:\production\home\tws\log\SYS_LOG_systeme.log", False)
    Ftxt.writeline (Year(date)) & vbTab & (Month(date)) & vbTab & (Day(date)) & vbTab & (time) & vbTab & (getSystemVar("COMPUTERNAME")) & vbTab & resultat1 & vbTab & resultat2 & vbTab & (PID) & vbTab & (terminal) & vbTab & resultat5 & vbTab & resultat4 & vbTab & return & vbTab & (gravite) & vbTab & resultat3 & vbTab & (getSystemVar("UNISON_JOBNUM")) & vbTab & (valeur) & vbTab & (message)
    Ftxt.Close

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 79
    Par défaut
    merci a toi pour ton aide J'avance bien.

    J'ai un autre petit soucis. Je voudrais remonté le code erreur du succés ou de l'echec du kill du process.

    Voici mon code qui me permet d'ecrire dans le fichier de log + de killer le process.

    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
    Function getSystemVar(VarName)
        Dim wss, env
        Set wss = CreateObject("WScript.Shell")
        Set env = wss.environment("process")
        getSystemVar = env(VarName)
    End Function
     
    'On recupere une partie dela chaine de caractere
     
    resultat1 = Mid(getSystemVar("UNISON_SCHED"),2,3)
    resultat2 = Mid(getSystemVar("UNISON_SCHED"),7,3)
    resultat3 = Mid(getSystemVar("UNISON_SCHED"),5,3)
    resultat4 = Mid(getSystemVar("UNISON_JOB"),14,43)
    resultat5 = Mid(getSystemVar("USERNAME"),13.6)
     
    main
    sub main()
    Dim NOM_PROCESS
    Dim args
    Set args = WScript.Arguments
    NOM_PROCESS= args(0)
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name = '" & NOM_PROCESS & "'")
    For Each objProcess in colProcessList
    Next    
    end sub
     
    message = "Le process" & (NOM_PROCESS)  & "a été killé :"
     
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set Ftxt = FSO.OpenTextFile ("D:\Script_test\Log_test.log",8,true)
    Ftxt.writeline (Year(date)) & vbTab & (Month(date)) & vbTab & (Day(date)) & vbTab & (time) & vbTab & (getSystemVar("COMPUTERNAME")) & vbTab & resultat1 & 
     
    vbTab & resultat2 & vbTab & (PID) & vbTab & (terminal) & vbTab & resultat5 & vbTab & resultat4 & vbTab & return & vbTab & (gravite) & vbTab & resultat3 & 
     
    vbTab & (getSystemVar("UNISON_JOBNUM")) & vbTab & (valeur) & vbTab & (message)
    Ftxt.Close
    merci pour votre aide precieuse

  7. #7
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    N'oublies tu pas d'appeler la méthode Terminate ?
    Description:
    La méthode Terminate termine un processus et toutes ses threads. La méthode renvoie une valeur entière qui peut être interprétée de la manière suivante :
    0 - Opération terminée correctement.
    2 - L'utilisateur n'a pas accès aux informations requises.
    3 - L'utilisateur n'a pas les privilèges suffisants.
    8 - Échec inconnu.
    9 - Le chemin d'accès spécifié n'existe pas.
    21 - Le paramètre spécifié est non valide.
    Autre - Pour des valeurs entières autres que celles apparaissant dans la liste ci-dessus, référez-vous à la documentation concernant les codes d'erreur Win32.
    Un autre code pour killer (plus compliquer) si tu as le handle de ton processus :
    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
     
    strComputer = "." 
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
    ' Obtain an instance of the the class 
    ' using a key property value.
    Set objShare = objWMIService.Get("Win32_Process.ReplaceKeyProperty=ReplacePropertyValue")
     
    ' Obtain an InParameters object specific
    ' to the method.
    Set objInParam = objShare.Methods_("Terminate"). _
        inParameters.SpawnInstance_()
     
     
    ' Add the input parameters.
    objInParam.Properties_.Item("Reason") =  4525
     
    ' Execute the method and obtain the return status.
    ' The OutParameters object in objOutParams
    ' is created by the provider.
    Set objOutParams = objWMIService.ExecMethod("Win32_Process.ReplaceKeyProperty=ReplacePropertyValue", "Terminate", objInParam)
     
    ' List OutParams
    Wscript.Echo "Out Parameters: "
    Wscript.echo "ReturnValue: " & objOutParams.ReturnValue
    Une autre façon de créer un processus (plus compliqué) :
    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
     
    strComputer = "." 
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
    ' Obtain the definition of the class.
    Set objShare = objWMIService.Get("Win32_Process")
     
    ' Obtain an InParameters object specific
    ' to the method.
    Set objInParam = objShare.Methods_("Create"). _
        inParameters.SpawnInstance_()
     
     
    ' Add the input parameters.
    objInParam.Properties_.Item("CommandLine") =  "notepad.exe"
     
    ' Execute the method and obtain the return status.
    ' The OutParameters object in objOutParams
    ' is created by the provider.
    Set objOutParams = objWMIService.ExecMethod("Win32_Process", "Create", objInParam)
     
    ' List OutParams
    Wscript.Echo "Out Parameters: "
    Wscript.echo "ProcessId: " & objOutParams.ProcessId
    Wscript.echo "ReturnValue: " & objOutParams.ReturnValue

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 79
    Par défaut
    Merci ced600 pour ton aide. Mais j'ai du mal a comprendre les codes que tu m as donnés. Quand tu me dis le handle c'est le corps du programme ?

    Si c'est ca je ne vois pas comment l'integrer dans mon code.

    Merci encore pour ton aide

  9. #9
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    nan nan, lorsque tu crée un process tu as l'objet associé à celui-ci.
    Une de ses propriétés s'appelle handle, c'est à elle que je faisais référence.

    Mais ne t'embêtes pas trop avec mes deux bouts de code, je les ai mis en bonus, normalement il suffit dans ta boucle d'appeler la méthode terminate et le tour est joué.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 79
    Par défaut
    Bonjour,

    Merci cela fonctionne bien 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
    Function getSystemVar(VarName)
        Dim wss, env
        Set wss = CreateObject("WScript.Shell")
        Set env = wss.environment("process")
        getSystemVar = env(VarName)
    End Function
     
     
     
    'On recupere une partie dela chaine de caractere
     
    resultat1 = Mid(getSystemVar("UNISON_SCHED"),2,3)
    resultat2 = Mid(getSystemVar("UNISON_SCHED"),7,3)
    resultat3 = Mid(getSystemVar("UNISON_SCHED"),5,3)
    resultat4 = Mid(getSystemVar("UNISON_JOB"),14,43)
    resultat5 = Mid(getSystemVar("USERNAME"),13.6)
     
     
     
    Dim NOM_PROCESS
    Dim args
    Set args = WScript.Arguments
    NOM_PROCESS= args(0)
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name = '" & NOM_PROCESS & "'")
    For Each objProcess in colProcessList
    return = objProcess.Terminate()
    message = "Le process" & vbTab & (NOM_PROCESS) & vbTab & "a été killé"
     
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set Ftxt = FSO.OpenTextFile ("D:\Script_test\Log_test.log",8,true)
    Ftxt.writeline (Year(date)) & vbTab & (Month(date)) & vbTab & (Day(date)) & vbTab & (time) & vbTab & (getSystemVar("COMPUTERNAME")) & vbTab & resultat1 & 
     
    vbTab & resultat2 & vbTab & (PID) & vbTab & (terminal) & vbTab & resultat5 & vbTab & resultat4 & vbTab & return & vbTab & (gravite) & vbTab & resultat3 & 
     
    vbTab & (getSystemVar("UNISON_JOBNUM")) & vbTab & (valeur) & vbTab & (message)
    Ftxt.Close
     
    Next
    Ce code me permet de killer le process et de creer une log. Je voudrais mettre un test pour savoir si le process existe ou pas.

    j' ai pas trop d'idee. Merci

  11. #11
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Regarde ici

    L'autheur du sujet propose à un moment un générateur de code WMI.

    Prends le et utilise le pour voir les propriétés et méthodes de l'objet process.
    (Le dernier onglet fournis des descriptions de ces propriértés et méthodes).

    Comme c'est un générateur de code il généra le code en fonction de la propriété ou de la méthode choisis pour un objet WMI donné.

    Si le process n'existe pas, Colprocesslist a une taille de 0.
    Il suffit donc de vérifier que la propriété "count" de cette liste est supérieur à zéro.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 79
    Par défaut
    Merci a toi pour ce petit programme mais il ne marche pas sur ma machine. Il me met un message d'erreur. Voir le message.

    J'ai fait un bout de code pouvez vousme dire ce que vous en pensez ?

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if NOM_PROCESS > 0 then
    return = 0
    Images attachées Images attachées  

  13. #13
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Citation Envoyé par lephyrexian Voir le message
    Merci a toi pour ce petit programme mais il ne marche pas sur ma machine. Il me met un message d'erreur. Voir le message.

    J'ai fait un bout de code pouvez vousme dire ce que vous en pensez ?

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if NOM_PROCESS > 0 then
    return = 0
    Heu....
    J'ai parlé de la propriété count de l'objet colProcessList.
    Ton test ne teste pas la non présence du processuss.
    Il teste juset si tu as bien au moins un argument passé lors de l'exécution du script.

    Pour l'erreur du programme je ne sais pas, tu as quoi os ?
    Parce qu'il faut je pense le framework .Net

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 79
    Par défaut
    Bonjour ced600 et encore merci pour ton aide.

    J'ai effectivement installé la framework .net et le soft que tu m as dit de recuperer fonctionne.

    J'ai regardé les differentes options et je pense avoir trouvé mon bonheur. Je vais recupererceci. Dis moi ce que t en pense.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    strComputer = "." 
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
    Set colItems = objWMIService.ExecQuery( _
        "SELECT * FROM Win32_Process WHERE Name = 'winlogon.exe'",,48) 
    For Each objItem in colItems 
        Wscript.Echo "-----------------------------------"
        Wscript.Echo "Win32_Process instance"
        Wscript.Echo "-----------------------------------"
        Wscript.Echo "Name: " & objItem.Name
    Next
    Je vais filtrer sur le nom.

    Par contre je ne comprends pas trop ce que tu m as dit au sujet de la propriété count de l'objet colProcessList.

    Merci de me dire ce que tu pense de tous ca

  15. #15
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Citation Envoyé par lephyrexian Voir le message
    Bonjour ced600 et encore merci pour ton aide.

    J'ai effectivement installé la framework .net et le soft que tu m as dit de recuperer fonctionne.

    J'ai regardé les differentes options et je pense avoir trouvé mon bonheur. Je vais recupererceci. Dis moi ce que t en pense.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    strComputer = "." 
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
    Set colItems = objWMIService.ExecQuery( _
        "SELECT * FROM Win32_Process WHERE Name = 'winlogon.exe'",,48) 
    For Each objItem in colItems 
        Wscript.Echo "-----------------------------------"
        Wscript.Echo "Win32_Process instance"
        Wscript.Echo "-----------------------------------"
        Wscript.Echo "Name: " & objItem.Name
    Next
    Je vais filtrer sur le nom.

    Par contre je ne comprends pas trop ce que tu m as dit au sujet de la propriété count de l'objet colProcessList.

    Merci de me dire ce que tu pense de tous ca
    Ce bout de code n'est pas nécessaire.

    Mettons les choses au point : colProcessList est l'objet que tu récupères grâce à la fonction ExecQuery.
    C'est en fait une liste d'objet, et comme toutes listes elle possède une propriété count qui renseigne sur la taille de la liste.

    La requête dans le ExecQuery filtre déjà sur le nom, et donc tu récupères une liste de process contenant tous les process ayant pour nom la valeur de NOM_PROCESS.

    Donc si ta liste est vide, le processus n'existe pas.
    Donc tu as juste à tester la valeur de la propriété count de ta liste ColProcessList.

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 79
    Par défaut
    Ok merci pour ces explications. Si j'ai bien compris cela donne ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    strComputer = "." 
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
    Set colItems = objWMIService.ExecQuery( _
        "SELECT * FROM Win32_Process WHERE Name = NOM_PROCESS",,48)
    If ColProcessList <> 0 then
    return = objProcess.Terminate()
    else
     
    return =  Ftxt.writeline " le process n'est pas la"

  17. #17
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Citation Envoyé par lephyrexian Voir le message
    Ok merci pour ces explications. Si j'ai bien compris cela donne ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    strComputer = "." 
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
    Set colItems = objWMIService.ExecQuery( _
        "SELECT * FROM Win32_Process WHERE Name = NOM_PROCESS",,48)
    If ColProcessList <> 0 then
    return = objProcess.Terminate()
    else
     
    return =  Ftxt.writeline " le process n'est pas la"
    Pas tout à fait, mais sais ce qu'est une classe, un objet, des propriétés, des methodes, ... ? Bref connais la Programation Orientée Objet (POO) ?

    Peut être devrais tu voir ce que c'est ?
    Voi même j'ai l'impression que tu n'as pas compris toute les notions de la programmation simplement.
    Comme par exemple ce qu'est une variable.
    Tu devrais reprendre les bases je pense.

    EN attendant je corrige ton script :
    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
     
    Function KillProcessByName (NOM_PROCESS)
       Dim retour
       Dim strComputer
       Dim objWMIService
       Dim colItems
       Dim FSO
       Dim Ftxt
       Dim path
     
       path = "D:\Script_test\Log_test.log"
       retour = 0
       strComputer = "." 
       Set FSO = CreateObject("Scripting.FileSystemObject")
       Set Ftxt = FSO.OpenTextFile (path,8,true)
       Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
       Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = '" & NOM_PROCESS & "'",,48)
       If ColProcessList.count <> 0 Then
          retour = objProcess.Terminate()
       End If
     
       Ftxt.writeline " le process n'est pas la"
       Ftxt.close()
     
       KillProcessByName = retour
    End Function.

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 79
    Par défaut
    Merci a toi pour m'avoir donné le code. c'est vrai que j ai du mal avec la prog meme si je fias tout pour monter en competence.

    Par contre le code que tu m as fourni marche ??

    Car chez moi il ne fait rien .

    VComment le lances tu ?

    moi je le lance comme ca: Nom_du script.vbs "Nom_process"

  19. #19
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par lephyrexian Voir le message
    moi je le lance comme ca: Nom_du script.vbs "Nom_process"
    pour le "lancer" comme cela il faut que ton script gère les arguments en ligne de commande voir :

    http://vb.developpez.com/faqvbs/?page=II.1#vbsArguments

    tu remplace l'appel à la fonction MsgBox .. par l'appel à ta fonction KillProcess..

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 79
    Par défaut
    Bon voila j'ai reussi a faire un script qui fonctionne

    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
    Function getSystemVar(VarName)
        Dim wss, env
        Set wss = CreateObject("WScript.Shell")
        Set env = wss.environment("process")
        getSystemVar = env(VarName)
    End Function
     
    'On recupere une partie dela chaine de caractere
     
    resultat1 = Mid(getSystemVar("UNISON_SCHED"),2,3)
    resultat2 = Mid(getSystemVar("UNISON_SCHED"),7,3)
    resultat3 = Mid(getSystemVar("UNISON_SCHED"),5,3)
    resultat4 = Mid(getSystemVar("UNISON_JOB"),14,43)
    resultat5 = Mid(getSystemVar("USERNAME"),13.6)
     
     
     
    Dim NOM_PROCESS
    Dim args
    Set args = WScript.Arguments
    NOM_PROCESS= args(0)
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name = '" & NOM_PROCESS & "'")
     
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set Ftxt = FSO.OpenTextFile ("D:\Script_test\Log_test.log",8,true)
    Ftxt.close
    If ColProcessList.count <> 0 Then
     
            For Each objProcess in colProcessList
            message = "Le process" & vbTab & (NOM_PROCESS) & vbTab & "a été killé"
     
       Dim retour
       Dim strComputer
       Dim objWMIService
       Dim colItems
       Dim FSO
       Dim Ftxt
       Dim path
     
       path = "D:\Script_test\Log_test.log"
       retour = 0
       strComputer = "."
     
       Set Ftxt = FSO.OpenTextFile (path,8,true)
       Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
       Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = '" & NOM_PROCESS & "'",,48)
     
          retour = objProcess.Terminate()
       Ftxt.writeline (Year(date)) & vbTab & (Month(date)) & vbTab & (Day(date)) & vbTab & (time) & vbTab & (getSystemVar("COMPUTERNAME")) & vbTab & resultat1 & vbTab & resultat2 & vbTab & (PID) & vbTab & (terminal) & vbTab & resultat5 & vbTab & resultat4 & vbTab & return & vbTab & (gravite) & vbTab & resultat3 & vbTab &(getSystemVar("UNISON_JOBNUM")) & vbTab & (valeur) & vbTab & (message)
    Ftxt.Close
            Next
     Else
     Set FSO = CreateObject("Scripting.FileSystemObject")
     Set Ftxt = FSO.OpenTextFile ("D:\Script_test\Log_test.log",8,true)
      Ftxt.writeline " le process n'est pas la"
       Ftxt.close()
     end if

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. problème d'écriture dans un fichier
    Par cartonol dans le forum Oracle
    Réponses: 12
    Dernier message: 17/08/2006, 17h08
  2. [FTP] problème d'écriture dans un fichier
    Par oops! dans le forum Langage
    Réponses: 14
    Dernier message: 08/08/2006, 16h52
  3. problème d'écriture dans un fichier
    Par seurjer dans le forum Langage
    Réponses: 8
    Dernier message: 01/06/2006, 09h15
  4. [PERL] Problème lecture/écriture dans un fichier
    Par LE NEINDRE dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2005, 13h15
  5. Problème d'écriture dans un fichier xml
    Par vanoou dans le forum C++Builder
    Réponses: 1
    Dernier message: 13/07/2005, 02h28

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