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 :

Acces à un partage sans lecteur reseau


Sujet :

VBScript

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Acces à un partage sans lecteur reseau
    Bonjour,
    Je tente de créer un script qui scanne tout le réseau et vérifie la présence d'un fichier sur chaque poste avant de lancer un psexec pour mettre à jour un programme maison.Pour cela, j'ai besoins d'accéder au disque dur de chaque machine.

    - Est-il possible de me connecter sur le partage administratif c$ de chaque machine sans connecter de lecteur réseau?

    - Une autre solution serait d'intégrer la verif de la présence du fichier dans le psexec, mais je ne sais pas comment faire pour logger les résultats. Plusieurs postes pourraient se connecter ensemble sur mon fichier de log. La question qui se pose alors, c'est comment gère-t'on les accès concurrents?

    NB : Le script sera lancé à l'aide d'un compte administrateur déclaré sur chaque machine. Nous ne fonctionnons pas en domaine, donc pas de GPO possible.

    Merci.
    Olivier

  2. #2
    Membre actif
    Inscrit en
    Mai 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 189
    Points : 212
    Points
    212
    Par défaut
    Salut olivier,

    je t'inscris les réponse que je connais :

    - Est-il possible de me connecter sur le partage administratif c$ de chaque machine sans connecter de lecteur réseau?

    Oui. Mais sur un echec il y a plusieurs causes possibles, qu'il te faut checker pour différencier les pb de réseau, de firewall, de droit... ou tout simplement l'existence du fichier

    - Une autre solution serait d'intégrer la verif de la présence du fichier dans le psexec, mais je ne sais pas comment faire pour logger les résultats. Plusieurs postes pourraient se connecter ensemble sur mon fichier de log. La question qui se pose alors, c'est comment gère-t'on les accès concurrents?

    Pas évident de loguer les résultats, j'ai pas mal galéré aussi pour cà, aujourd'hui pour psexec je logue dans un fichier texte, que je relis pour l'exploiter.
    Un petit exemple :
    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
     
    FichierTemp = "temp.txt"
    Const OverWriteFiles = True
    Const ForAppending = 8
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    ScriptPath = Left(WScript.ScriptFullName,(Len(WScript.ScriptFullName) - (Len(WScript.ScriptName) + 1)))
    Set objShell = CreateObject("WScript.Shell")
    '-----------------------------------------------------------------
    'Pré-traitement
    '-----------------------------------------------------------------
    wscript.echo ("")
    wscript.echo ("")
    wscript.echo ("_______________________________________________________________________")
    If objDictionary.Count < 2 then
    	wscript.echo ("===> preparing Mira permissions translation for " & objDictionary.Count & " User")
    else
    	wscript.echo ("===> preparing Mira permissions translation for " & objDictionary.Count & " Users")
    End If
    wscript.echo ("_______________________________________________________________________")
    'copie de psexec
    wscript.echo ("")
    wscript.echo ("===> 1/6 Preparing pstools ...")
    wscript.echo ("__________________________________________")
    wscript.sleep 500
    Windir = objShell.ExpandEnvironmentStrings("%Windir%")
    If objFSO.FileExists(Windir & "\system32\psexec.exe") Then
    	wscript.echo "==> psexec tool found"
    else
    	objFSO.CopyFile ScriptPath &  "\psexec.exe" , Windir & "\system32\", OverwriteExisting
    	wscript.echo "XX> psexec tool not found"
    	wscript.echo "| ==> copying psexec tool to " & Windir & "\system32\ directory"
    End If
     
    commande = "%COMSPEC% /C psexec \\"maCommande.exe" >> """ & ScriptPath & "\" & FichierTemp & ""
    		set objExec = objShell.Run(commande,7,true)
    		Set objTempFile = objFSO.OpenTextFile (ScriptPath & "\" & FichierTemp, ForReading, True)
    		Results = objTempFile.ReadAll	
    		if InStr(Results, "successfully") Then
    			wscript.echo("==> Tout fonctionne"
    		else
    			wscript.echo("XX> Ca chie :)")
    		End If
    		objTempFile.Close
    		set objExec = Nothing
    note : psexec doit etre dans le repertoir du script pour que la copie fonctionne.

    enjoy^^

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Il est possible de se connecter sur le partage administratif!?
    Merci Spandemonium,
    peux-tu me préciser comment me connecter sur un partage administratif.

    Le "if" mis en gras me renvoie l'erreur "Chemin d'accès introuvable".

    voici ce que j'ai écrit, mais qui ne marche pas.
    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
    Option Explicit
    'On Error Resume Next
    Dim strAdrATester, Result, i, oFsoLog, oLog, strFileTrend, oFileTrend
    ' A convertir en fonction ou procedure
    Dim oFsoTrendParam, oTrendParam, strLigneLue
    Const PARAMRECHERCHE = "10.22.10.19"
    
    Const STRPLAGEIP = "10.22.12." 'Plage d'ardesse à tester de 0 à 255
    Const FICHIERLOG = "C:\install\log.csv"
    Const FORREAD=1
    Const FORWRIT=2
    Const FORAPPEND=8
    Const FICHIERTREND="\C$\Program Files\Trend Micro\OfficeScan Client\OFCSCAN.INI"
    
    '==========================================================================
    'Déclaration des objets
    ''Ouverture (création si absent) du fichier "FICHIERLOG"
    Set oFsoLog = CreateObject("Scripting.FileSystemObject")
    Set oLog = oFsoLog.OpenTextFile(FICHIERLOG, FORAPPEND, True)
    Set oFileTrend=CreateObject("Scripting.FileSystemObject")
    '==========================================================================
    ' Corps du programme
    
    For i = 1 To 10 Step 1
    	strAdrATester = STRPLAGEIP & i
    	Result = TestAdrIp(StrAdrATester)
    	If Result = "present" Then
    		'Verif si trend installé
    		strFileTrend="\\" & strAdrATester & FICHIERTREND
    		'WScript.Echo strFileTrend
    		' Tester le IF
    		if oFileTrend.FileExists(strFileTrend) Then
    			Set oFsoTrendParam = CreateObject("Scripting.FileSystemObject")
    			Set oTrendParam = oFsoTrendParam.OpenTextFile(FICHIERTREND, FORREAD, True)
    			Do Until oTrendParam.atendofstream
    				strLigneLue = oTrendParam.readline()
    				If InStr(1, strLigneLue, PARAMRECHERCHE) > 0 Then
    					WScript.Echo strAdrATester & "Poste à jour"
    					'maj Log : Etat = Poste à jour; Date = now()
    				Else
    					WScript.Echo strAdrATester & "PSEXEC lancé"
    					'maj log : Etat = MAJ lancée; Date = now()
    					' PSEXEC
    					
    				End If
    			Loop
    			oTrendParam.Close
    			Set oTrendParam = Nothing
    			Set oFsoTrendParam = Nothing
    		Else
    			WScript.Echo strAdrATester & "Anti-virus non-installé sur le poste"
    			'maj log : Etat = Anti-virus non-installé sur le poste
    		End If
    	Else
    	WScript.Echo "Poste éteint ou absent"
    	End If
    	'Ajout des valeurs "strAdrATester" et "Result" séparées par un ; dans "FICHIERLOG"
        oLog.WriteLine( strAdrATester & ";" & Result)
    
    Next
    oLog.close
    '==========================================================================
    ' Fonctions et procédures
    
    ' Fonction qui reçoit une adresse IP et renvoie present si le poste est présent sur le réseau
    ' ou absent s'il n'y a pas de réponse au ping
    Function TestAdrIp(strIpCible)
    	On Error Resume Next
    	Const WaitOnReturn = TRUE	'on attend la fin de l'exécution
    	Const WindowStyle = 0		'on n'ouvre pas de fenêtre
    	Dim oShell, oExec, strPingResults
    		
    	Set oShell = CreateObject("WScript.Shell")
    	Set oExec = oShell.Exec("ping -n 1 -w 1000 " & strIpCible)
    	strPingResults = LCase(oExec.StdOut.ReadAll)
    	If InStr(strPingResults, "ponse de " & strIpCible) Then
    		TestAdrIp = "present"
    	Else
    		TestAdrIp = "absent"
    	End If
    End Function
    
    wscript.quit 0
    En fait, mon script sera lancé plusieurs fois durant une semaine.
    Il scanne tous les postes du réseau et s'assure que l'anti-virus est à jour.
    Si ce n'est pas le cas, il exécute un psexec qui lance la mise à jour.
    A chaque exécution il doit generer/mettre à jour un log sur lequel il se base lors de l'exécution suivante pour ne pas interroger un poste qui est déjà à jour.

    Le souci avec la methode de log via psexec, c'est qu'il va générer autant de fichiers que de postes soit près de 500. Et qu'a l'exécution suivante, il devra effectuer un traitement pour analyser/centraliser ces fichiers. Si on peut l'éviter....

    Merci pour ton aide.
    Olivier.

  4. #4
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Points : 5
    Points
    5
    Par défaut [RESOLU] Acces à un partage sans lecteur réseau
    Il s'agissait d'une erreur de logique dans mon code
    Après une relecture (ou deux...), ça 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
    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
     
     
    ' Variables et constantes
    Option Explicit
    'On Error Resume Next
    Dim strAdrATester, Result, i, oFsoLog, oLog, strFileTrend, oFileTrend
    ' A convertir en fonction ou procedure
    Dim oFsoTrendParam, oTrendParam, strLigneLue, strNonMaj
    Const PARAMRECHERCHE = "10.22.10.19"
     
    Const STRPLAGEIP = "10.22.12." 'Plage d'ardesse à tester de 0 à 255
    Const FICHIERLOG = "C:\install\log.csv"
    Const FORREAD=1
    Const FORWRIT=2
    Const FORAPPEND=8
    Const FICHIERTREND="\C$\Program Files\Trend Micro\OfficeScan Client\OFCSCAN.INI"
     
    '==========================================================================
    'Déclaration des objets
    ''Ouverture (création si absent) du fichier "FICHIERLOG"
    Set oFsoLog = CreateObject("Scripting.FileSystemObject")
    Set oLog = oFsoLog.OpenTextFile(FICHIERLOG, FORAPPEND, True)
    Set oFileTrend=CreateObject("Scripting.FileSystemObject")
    '==========================================================================
    ' Corps du programme
     
    For i = 6 To 8 Step 1
    	strAdrATester = STRPLAGEIP & i
    	Result = TestAdrIp(StrAdrATester)
    	If Result = "present" Then
    		'Verif si trend installé
    		strFileTrend="\\" & strAdrATester & FICHIERTREND
    		'WScript.Echo strFileTrend
     
    		' Tester le IF
    		strNonMaj = 0
    		if oFileTrend.FileExists(strFileTrend) Then
    			WScript.Echo "le fichier existe"
    			Set oFsoTrendParam = CreateObject("Scripting.FileSystemObject")
    			Set oTrendParam = oFsoTrendParam.OpenTextFile(strFileTrend, FORREAD, True)
    			Do Until oTrendParam.atendofstream
    				strLigneLue = oTrendParam.readline()
    				'WScript.Echo strLigneLue
    				If InStr(1, strLigneLue, PARAMRECHERCHE) > 0 Then
    					WScript.Echo strAdrATester & "Poste à jour"
    					'maj Log : Etat = Poste à jour; Date = now()
    					strNonMaj = 1
    					Exit Do
    				End If
    			Loop
    			If strNonMaj = 0 Then
    				  	WScript.Echo strAdrATester & "PSEXEC lancé"
      					'maj log : Etat = MAJ lancée; Date = now()
     					'PSEXEC
     			End If
    			oTrendParam.Close
    			Set oTrendParam = Nothing
    			Set oFsoTrendParam = Nothing
    		Else
    			WScript.Echo strAdrATester & "Anti-virus non-installé sur le poste"
    			'maj log : Etat = Anti-virus non-installé sur le poste
    		End If
    	Else
    		WScript.Echo "Poste éteint ou absent"
    	End If
    	'Ajout des valeurs "strAdrATester" et "Result" séparées par un ; dans "FICHIERLOG"
        oLog.WriteLine( strAdrATester & ";" & Result)
     
    Next
    oLog.close
    '==========================================================================
    ' Fonctions et procédures
     
    ' Fonction qui reçoit une adresse IP et renvoie present si le poste est présent sur le réseau
    ' ou absent s'il n'y a pas de réponse au ping
    Function TestAdrIp(strIpCible)
    	On Error Resume Next
    	Const WaitOnReturn = TRUE	'on attend la fin de l'exécution
    	Const WindowStyle = 0		'on n'ouvre pas de fenêtre
    	Dim oShell, oExec, strPingResults
     
    	Set oShell = CreateObject("WScript.Shell")
    	Set oExec = oShell.Exec("ping -n 1 -w 1000 " & strIpCible)
    	strPingResults = LCase(oExec.StdOut.ReadAll)
    	If InStr(strPingResults, "ponse de " & strIpCible) Then
    		TestAdrIp = "present"
    	Else
    		TestAdrIp = "absent"
    	End If
    End Function
     
    wscript.quit 0
    Merci à spandemonium qui m'a fourni un bout de code qui me servira prochainement.

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

Discussions similaires

  1. Accès à lecteur reseau depuis Win Vista
    Par cynoq dans le forum Windows Serveur
    Réponses: 12
    Dernier message: 11/02/2009, 16h19
  2. Accès doc partagé win2003 sans mdp
    Par js8bleu dans le forum Windows Serveur
    Réponses: 15
    Dernier message: 09/02/2008, 01h02
  3. [Réseau] Problème accès lecteur reseau
    Par locs dans le forum Langage
    Réponses: 3
    Dernier message: 08/08/2006, 14h00
  4. Accès clef USB sans passer par la lettre de lecteur
    Par Ygster dans le forum Windows
    Réponses: 1
    Dernier message: 16/05/2006, 11h21
  5. Connecter un lecteur reseau
    Par manusweb dans le forum C++Builder
    Réponses: 4
    Dernier message: 03/09/2002, 12h07

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