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 :

Microsoft VBScript: Permission refusée


Sujet :

VBScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 30
    Par défaut Microsoft VBScript: Permission refusée
    Bonjour,

    Dans un des scripts sur lesquels je tente désespérément de travailler, je rencontre un petit problème.

    En effet, la fonction suivante ne me permet pas d'obtenir le résultat escompté :

    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
    Function GETINFO_PARTAGE(FS1, varwhere)
    	 On Error Resume Next
    	 'création du chemin du partage PathShare
    	 Dim PathShare : PathShare = "\\" & FS1 & "\Partage"
     
    	 'check de la dispo du lecteur
    	 If fso.driveExists("I:") Then
    	   Net.RemoveNetworkDrive "I:", True, True
    	   Net.MapNetworkDrive "I:", PathShare, , User, Password
    	 Else
    	   Net.MapNetworkDrive "I:", PathShare, , User, Password
    	 End If
    	 'Attrappe le disque I:
    	 Dim Disque : Set Disque = fso.GetDrive("I:")
    	 'récupère l'occupation et le disponnible
    	 Dim Occup : Occup = FormatNumber(((Disque.TotalSize - Disque.FreeSpace)/1024^3), 3)
    	 Dim Dispo : Dispo = FormatNumber((Disque.FreeSpace/1024^3), 3)
    	 Dim colDossiers, Dossier, outinfo
     
    	If err.number <> 0 then
    		GETINFO_PARTAGE = PathShare & ";Non Disponible"
    		On Error Goto 0
    		Exit Function
    	End If
     
    	 outinfo = PathShare & ";" & Occup & ";" & Dispo & vbCrlf
    	 Set colDossiers = fso.getFolder(PathShare).SubFolders
     
    	For each Dossier in colDossiers
    		outinfo = outinfo & varwhere & ";" & UCase(dossier.path) & ";" & FormatNumber((dossier.size/1024^3), 3) & vbCrlf
     
    		If Err.Number <> 0 Then
    			outinfo = outinfo & varwhere & ";" & UCase(dossier.path) & ";" & Err.Description & vbCrlf
    			On Error Goto 0
    		End If
    	Next
     
    	Net.RemoveNetworkDrive "I:", True, True
     
    	GETINFO_PARTAGE = Left(outinfo, Len(outinfo) -1)
    End Function 'GETINFO_PARTAGE
    Je me mange des "C:\script.vbs(157, 3) Erreur d'exécution Microsoft VBScript: Permission refusée" sur la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    outinfo = outinfo & varwhere & ";" & UCase(dossier.path) & ";" & FormatNumber((dossier.size/1024^3), 3) & vbCrlf
    Et n'arrive pas à passer outre.

    En résumé, cette fonction est censée (entre autre) :
    - Mapper un partage (NAS)
    - Récupérer l'espace disque utilisé du volume sur lequel est monté ce partage
    - Récupérer l'espace disque disponible du volume sur lequel est monté ce partage
    - Faire de même avec chaque sous répertoire.

    J'ai besoin que :
    - Si erreur sur serveur, il passe au serveur suivant = OK
    - Si erreur sur Partage, il passe au partage suivant = OK (je crois)
    - Si erreur sur Dossier dans le partage, il passe au dossier suivant dans ce partage = KO (de toute évidence).

    Pouvez-vous m'aider, SVP, à comprendre ce qui ne va pas dans cette fonction ?

    Merci d'avance pour votre aide.

    Sincèrement,
    Boueep

    EDIT : Remplacement de "ouKilEst" par "varwhere" dans la 2nd zone code.

  2. #2
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Il faudra peut-être revoir les paramètres passés à la fonction au cours de l'appel de celle-ci s'ils sont compatibles ou non car avec ce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    set fso=createobject("scripting.filesystemobject")
    set dossier=fso.getfolder("C:\Windows\")
    outinfo = outinfo & ouKilEst & ";" & UCase(dossier.path) & ";" & FormatNumber((dossier.size/(1024^3)), 3) & vbCrlf
    msgbox outinfo
    aucun problème
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 30
    Par défaut
    Je ne penses pas que ce soit lié à ça.

    Je m'expliques :
    ==> Je penses que le compte utilisé au moment du mappage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Net.MapNetworkDrive "I:", PathShare, , User, Password
    N'a pas les droits sur certains des sous dossiers (héritage désactivé).

    Dans l'absolu, cela ne me dérange pas de ne pas avoir les infos "espace disque occupé" pour certains des sous dossiers sous prétexte que je n'ai pas les droits nécessaires.

    Ce qui m'ennui, par contre, c'est que le script s'arrête en cas de "Permission Refusée". Je n'arrive pas à gérer le On Error Resume Next pour les subfolders alors qu'à priori, j'y arrive pour les partages en eux-même.

    Pour info, ce script passe en revue 200 serveurs ... c'est frustrant qu'il plante sur le 47ème après 4 heures de check.

    Merci encore.
    Boueep

  4. #4
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Oui, là je vois mieux le problème.

    Tu peux dans ce cas recourir à une gestion d'erreur avant même l'apparition de l'erreur en posant une condition sur le serveur et/ou le dossier en cours de traitement telle que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Err.Number <> 70 Then ' 70 = Permission refusée
        outinfo = outinfo & varwhere & ";" & UCase(dossier.path) & ";" & Err.Description & vbCrlf
    Else 
        ' Ici un code (fonction ou procédure) pour le branchement sur le serveur suivant...
    End If
    Je concède que la gestion d'erreur n'est pas facile en VBS alors qu'elle l'est en VB et VBA.
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 30
    Par défaut
    Bonjour,

    Merci beaucoup pour ces axes de réflexion !
    A priori (je vous dirai ça demain une fois le script déroulé), la solution était là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	For each Dossier in colDossiers
            on error resume next
            outinfo = outinfo & varwhere & ";" & UCase(dossier.path) & ";" & FormatNumber((dossier.size/1024^3), 3) & vbCrlf
     
            If Err.Number <> 0 Then
                outinfo = outinfo & varwhere & ";" & UCase(dossier.path) & ";" & Err.Description & vbCrlf
                On Error Goto 0
            End If
            Next
    La fonction entière :

    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
    Function GETINFO_PARTAGE(FS1, varwhere)
    	 On Error Resume Next
    	 'création du chemin du partage PathShare
    	 Dim PathShare : PathShare = "\\" & FS1 & "\Partage"
     
    	 'check de la dispo du lecteur
    	 If fso.driveExists("I:") Then
    	   Net.RemoveNetworkDrive "I:", True, True
    	   Net.MapNetworkDrive "I:", PathShare, , User, Password
    	 Else
    	   Net.MapNetworkDrive "I:", PathShare, , User, Password
    	 End If
    	 'Attrappe le disque I:
    	 Dim Disque : Set Disque = fso.GetDrive("I:")
    	 'récupère l'occupation et le disponnible
    	 Dim Occup : Occup = FormatNumber(((Disque.TotalSize - Disque.FreeSpace)/1024^3), 3)
    	 Dim Dispo : Dispo = FormatNumber((Disque.FreeSpace/1024^3), 3)
    	 Dim colDossiers, Dossier, outinfo
     
    	If err.number <> 0 then
    		GETINFO_PARTAGE = PathShare & ";Non Disponible"
    		On Error Goto 0
    		Exit Function
    	End If
     
    	 outinfo = PathShare & ";" & Occup & ";" & Dispo & vbCrlf
    	 Set colDossiers = fso.getFolder(PathShare).SubFolders
     
    	For each Dossier in colDossiers
            on error resume next
            outinfo = outinfo & varwhere & ";" & UCase(dossier.path) & ";" & FormatNumber((dossier.size/1024^3), 3) & vbCrlf
     
            If Err.Number <> 0 Then
                outinfo = outinfo & varwhere & ";" & UCase(dossier.path) & ";" & Err.Description & vbCrlf
                On Error Goto 0
            End If
            Next
     
    	Net.RemoveNetworkDrive "I:", True, True
     
    	GETINFO_PARTAGE = Left(outinfo, Len(outinfo) -1)
    End Function 'GETINFO_PARTAGE
    Si c'est OK demain, je passerai le POST en Résolu.
    Merci encore.

Discussions similaires

  1. tester le titre d'une fenêtre retourne Permission refusée
    Par titouille dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 16/12/2005, 16h28
  2. Microsoft VBScript runtime error '800a01a8'
    Par marlene dans le forum ASP
    Réponses: 13
    Dernier message: 12/05/2005, 17h21
  3. Permission refusée (...encore)
    Par KalHadj-Nikov dans le forum ASP
    Réponses: 11
    Dernier message: 27/04/2005, 09h20
  4. Réponses: 2
    Dernier message: 19/04/2005, 15h31
  5. Réponses: 8
    Dernier message: 14/11/2003, 22h51

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