Wmic gérer les erreurs "access denied"

Bonjour le forum,

Précédement, j'ai recu de l'aide de certains d'entre vous pour récupérer le masque de sous réseau d'un ordinateur distant

Voir cette discussion

En utilisation nominal, le code fonctionne parfaitement. La où ça coince en revanche, c'est si le mot de passe saisie comporte une erreur. En effet, tout ce qui est vue est que le masque de sous réseau n’apparaît pas, mais seul le message d'erreur prédefinie apparait, je n'ai pas l'information comme quoi le MDP est faux.

si c'est un timeout, il me suffit de déclencher la macro à nouveau et je récupère l'information, mais si, en revanche, le MDP saisie est erroné, mon compte se verrouille à la troisième tentative.

Serait il possible d'identifier le message d'erreur suivant ?

Noeud - ####
ERREUR :
Description = Accès refusé
  • Si oui, créer une condition qui efface le MDP de la mémoire pour qu'il soit redemandé
  • Et si pas d'erreur, mais uniquement un timeout, juste relancer la macro de façon a récupérer l'info malgré tout

Malheureusement, j'ai bloqué à la première étape qui est que /output:CLIPBOARD ne copie que le résultat valide, si c'est une erreur, l'info ne se copie pas...

D'avance merci pour votre aide

Nylream

Bonsoir,

si tu ajoutes 2>erreur.log à la fin de ta commande wmic tu recevras les messages d'erreur dans le fichier erreur.log.

après exécution de la commande, ouvre ce fichier et interprète le résultat pour ensuite lancer les actions en conséquence.

Bonjour H2so4

Merci pour ta réponse,

J'ai suivis ton conseil, mais je ne retrouve pas le ficher log en question... idéalement, il faudrait qu'il s'écrive dans le même répertoire que le classeur

Merci pour ton aide,

Bonjour,

idéalement, il faudrait qu'il s'écrive dans le même répertoire que le classeur

il te suffit de préciser le chemin complet du fichier incluant les répertoires.

Bonjour h2so4, le forum,

Merci pour ta réponse,

Ne serait il pas possible de copier dans le clipboard, que ce soit le résultat attendu ou un accès refusé ?

J'arrive a coller le fichier, mais plusieurs choses me dérange avec cette solutions

  • Le classeur que je fais est pour différente personne dans un service (chacun l'ouvrira en local) mais chacun le mettra ou il veut sur son ordi (document, bureau, ailleurs...) et le fichier error.log va forcement se loger ailleurs.
  • il va falloir modifier le VBA pour récupérer le contenu de l'erreur pour l'analyser et aussi vérifier que le fichier correspond à la dernière requête, et non un reliquat

J'ai tenté différente façon de récupérer l'erreur de la même façon que le résultat attendu mais rien n'y fait...

Si quelqu'un à une idée

Merci d'avance

Bonjour,

à tester

Sub getIPsubnet()
    If userid = "" Then
        userid = Range("E1")
        VALID.Show
    End If
    If password = "" Then userid = "": Exit Sub
    server_name = Range("C4")
    Set dob = New MSForms.DataObject
    errorlog = ThisWorkbook.Path & Application.PathSeparator & "error.log"
    On Error Resume Next
    Kill errorlog
    On Error GoTo 0
    batfile = ThisWorkbook.Path & Application.PathSeparator & "wmicbat.bat"
    Open batfile For Output As #1
    Print #1, "wmic /node:" & server_name & " /user:STORES\" & userid & " /password:" & password & " /output:CLIPBOARD nicconfig get IPsubnet" & " 2>" & errorlog
    Close 1
    commande = batfile
    Shell commande, vbHide
    On Error Resume Next
    Open errorlog For Input As 1
    r = Input(LOF(1), #1)
    Close
    If Len(r) > 0 Then
        If InStr(r, "Invalid Password") Then ' à adapter en fonction du message d'erreur que tu reçois et que tu veux détecter
            MsgBox "mot de passe non valide"
        Else
            MsgBox r
        End If
    Else
        dl = Cells(Rows.Count, 1).End(xlUp).Row + 1
        On Error GoTo erreur
        Application.Wait Now + TimeValue("0:00:02")
        dob.GetFromClipboard
        subnet = Split(dob.GetText(1), "{")(1)
        subnet = Split(subnet, "}")(0)
        Sheets("Valeurs").Range("A1") = subnet
    End If
         Application.CutCopyMode = False
        Exit Sub
erreur:
    If Err <> 0 Then MsgBox "Réponse non reçue"
End Sub

Bonjour h2so4, le forum,

Merci pour ta réponse et ton aide,

J'ai essayé le code, et j'ai une Erreur d’exécution "5": Argument ou appel de procédure incorrect sur la ligne 18 "Shell commande, vbHide"

Premier test, j'ai donc utilisé un mot de passe valide, pour voir le cas nominal

Merci encore pour ton aide,

Bonjour,

chez moi ce code fonctionne. Je vois une différence, c'est que tu as ajouté un nom de domaine par défaut pour le userid. (mais selon moi cela n'explique pas le problème).

ajoute un msgbox commande avant l'instruction shell, exécute l'instruction affichée dans une fenêtre de commande et regarde quel message d'erreur tu reçois.

J'ai essayé mais je ne dois pas m'y prendre correctement...

"MsgBox commande shell commande, vbhide"

ça me met un message d'erreur et la ligne apparaît en rouge, j'ai tenté des variantes, mais même si la ligne n’apparaît pas en rouge, ça plante

Pourrait tu me préciser la ligne entière ?

Merci

bonjour,

désolé je pensais que tu connaissais un peu vba.

voici

MsgBox commande 'affiche la commande qui va être exécutée
shell commande, vbhide

non, au mieux, pour le vba, je comprend vaguement ce que je lis

merci pour ta réponse,

en effet, ça marche

Le message m'indique le chemin pour "wmicbat.bat" qui est recherché dans le même dossier que le classeur, donc dans

D:\Users\*account*\Documents\OneDrive\*Dossier*\wmicbat.bat

C'est la ligne ci-dessous qui est sélectionnée avant de pointer vers "shell commande, vbhide"

batfile = ThisWorkbook.Path & Application.PathSeparator & "wmicbat.bat"

Je me serais attendu à trouver "wmicbat.bat" dans le dossier windows ou system 32, je ne pensais pas qu'il était généré par ce code

Merci pour ton aide

Rechercher des sujets similaires à "wmic gerer erreurs access denied"