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 :

Batch Correctif Profil.bak


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Femme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mars 2017
    Messages : 1
    Par défaut Batch Correctif Profil.bak
    Avis aux pros des batch!

    Je me présente je m’appelle Anne, et je suis technicienne de maintenance hardware et software informatique.
    Quotidiennement, nous avons 2 à 3 appels par jours d’utilisateurs qui n’arrivent pas à se connecter sur leur profil. Ils ont le message suivant : «*Echec d’ouverture de session par le Service de profil utilisateur. Impossible de charger le profil utilisateur*»

    Ce qui se passe, c’est que dans la base de registre HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList, le profil user se retrouve avec une extension .bak; un profil portant le SID du user s’est créé contenant la donnée C:\Users\Temp dans la valeur ProfileImagePath; et à l’emplacement C:\Users se trouve un dossier Temp.

    J’ai donc décidé de me lancer dans les batch (c’est mon tout premier), afin de régler à distance d’un simple double clique, ce que je règle jusqu’à présent en prenant la main sur les postes en faisant mes manips répétitives…

    Mon batch se déroule en 3 parties :
    - la première qui supprime la clef profil contenant la donnée C:\Users\Temp
    - la deuxième qui renomme le profil.bak en profil
    - la troisième qui supprime mon dossier Temp dans C:\Users

    Mon batch fonctionne très bien sur mon poste local…
    Et quand je le test sur des postes depuis le réseau… C’est une toute autre histoire, et je ne comprends pas ce qui cloche… Ca me rend complètement dingue! C’est vraiment WTF!!?
    C’est la première partie de mon batch qui semble foirer à chaque fois…

    Le script lancé est le même, exécuté en tant qu’admin, sur 2 machines différentes, mais en Windows7 toutes les deux, avec le registre paramétré de la même façon, et ça me retourne des résultats complètement différents

    Test 1 : Batch lancé depuis mon poste vers un pc portable distant :
    Il a beau exister une donnée contenant C:\Users\Temp dans la valeur ProfileImagePath d’un profil ayant "pris la place" du profil user, à l’exécution de mon script, dans DONNEE_PIP, ça me renvoie pour chaque profil une donnée vide!!
    Et c’est là ou c’est trop bizarre, la suite de mon batch s’exécute pourtant sans problème et lorsque je vais vérifier la base de registre sur le portable, je constate que tout est comme ci le batch avait fonctionné parfaitement… et j’arrive à me logger sur le profil_user sans problème, j’ai bien toutes mes données…!

    Test 2 : Batch lancé depuis mon poste vers une UC fixe distante :
    Tout se passe comme pour mes tests vers le portable, sauf que lorsque je vais vérifier la base de registre, j’ai bien le profil contenant C:\Users\Temp qui a été supprimé (contrairement à se que me dit le déroulement du script), et au lieu d’avoir mon profil_user.bak renommé en profil_user, je me retrouve avec 2 profils du même user (sauf que le 2nd profil se nomme maintenant profil_user.nom_du_domaine); et bien évidement lorsqu’on se connecte sur la session, on se retrouve dans le 2nd profil qui ne contient pas les données (bureau, documents, images,…) de l’utilisateur…

    Quoi qu’il arrive, il semble y avoir un soucis dans ma première partie… Sauf que la je sèche complètement parce que j'ai des résultats complètement différent... Quelqu’un a-t-il une idée, ou voit-il quelque d'incorrect dans mon code?

    Code bat : 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
    111
    112
    113
    114
    115
    116
    117
    118
    @echo OFF
     
    setlocal enabledelayedexpansion
     
    rem ############## Declaration des variables et constantes ##############
    @SET /P ADRESSE_IP=[Entrez l'adresse IP du poste distant : ]
    @SET /P USER_ADMIN=[Entrez votre samaccountname : ]
    @SET /P USER_MDP=[Entrez votre mot de passe : ]
    SET CHEMIN_COMPLET_CLEF="\\%ADRESSE_IP%\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
    SET NOM_VALEUR=ProfileImagePath
    SET DONNEE_VALEUR_TEMP="C:\Users\Temp"
    SET CHEMIN_REP_USER_TEMP=\\%ADRESSE_IP%\C$\Users\Temp
     
     
    rem ############## Déclaration de permission de modification sur le pc distant ##############
    sc \\%ADRESSE_IP% start remoteregistry
    net use %REP_USER_TEMP% /user:%USER_ADMIN% %USER_MDP% 
    cls
     
    rem                               ############## Début ##############
    rem echo "TEST - Affiche l'adresse ip du user : "%ADRESSE_IP%
    rem echo "TEST - Affichage de la clef de registre : "%CHEMIN_COMPLET_CLEF%
    rem echo "TEST - Affichage repertoire Temp : " %CHEMIN_REP_USER_TEMP%
    echo "                               -- Batch Correctif_ProfilBak --                                    "
    echo "                                                                                                  "
    echo "###################### Suppression de la clef profil contenant C:\Users\Temp #####################"
    echo "   Veuillez patienter...                                                                          "
    echo "                                                                                                  "
    rem # Recuperation de tous les profils dans dans ProfileList 
    for /f "tokens=*" %%a in ('reg query %CHEMIN_COMPLET_CLEF%') do (
    	set PROFIL_EN_COURS="%%a"
    	rem echo "####### AFFICHAGE DES PROFILS EN COURS D'ANALYSE #######"
        rem echo "TEST - Affichage du profil en cours d'analyse : " !PROFIL_EN_COURS!
        rem # Les 3 valeurs qui composent ProfileImagePath son le nom, le type et la donnee
        rem # Recupere la 3ème valeurs de ProfileImagePath NOM_VALEUR dans le Profil en cours
        for /f "tokens=1-3" %%b in ('reg query !PROFIL_EN_COURS! /v %NOM_VALEUR%') do (
    		rem echo "####### VALLEUR DU PIP DANS LE PROFIL EN COURS #######"
    		set NOM_PIP="%%b"
    		rem echo "TEST - Nom du ProfileImagePath : " !NOM_PIP!
    		set TYPE_PIP="%%c"
    		rem echo "TEST - Type du ProfileImagePath : " !TYPE_PIP!
    		set DONNEE_PIP="%%d"
    		rem echo "TEST - Donnee du ProfileImagePath : " !DONNEE_PIP!
    		rem # Si la donnee du ProfileImagePath contient le userTemp
    		if !DONNEE_PIP! == %DONNEE_VALEUR_TEMP% (
    			rem echo "############## PROFIL CONTENANT C:\USERS\TEMP ##############"
    		    rem echo "TEST - Clef_Profil contenant C:\Users\Temp trouve : " !PROFIL_EN_COURS!
    			rem # Alors suppression du profil en cours contenant DONNEE_PIP
    			reg delete !PROFIL_EN_COURS! /f
    			echo "                                                                                                  "
    			echo "       Profil contenant C:\Users\Temp dans la donnee de ProfileImagePath trouve et supprime!      "
    			echo "                                                                                                  "
    		) else ( 
    			echo "  Pas de profil contenant C:\Users\Temp dans la donnee de ProfileImagePath trouve dans ce profil  "
    			echo "  Analyse du suivant...                                                                           "
    		)
    	)
    )
    echo "                                                                                                  "
    pause
    cls
    echo "########################## Renommage de la clef_profil.bak en cle_profil #########################"
    echo "   Veuillez patienter...                                                                          "
    echo "                                                                                                  "
    rem Recuperation du profil ayant .bak dans dans ProfileList 
    for /f "tokens=*" %%a in ('reg query %CHEMIN_COMPLET_CLEF% ^| find "bak"') do (
    	set PROFIL_BAK="\\%ADRESSE_IP%\%%a"
    	rem echo "TEST - Affiche le profil.bak : "!PROFIL_BAK!
    	rem # Recuperation de \\X. X. X. X\Clef_registre\Profil sans .bak
    	for /f "tokens=1-5 delims=." %%b in (!PROFIL_BAK!) do (
    		set PROFIL_USER="%%b.%%c.%%d.%%e"
    		rem echo "############## CLEF PROFIL SANS .BAK ##############"
    		rem echo "TEST - Affiche le profil sans .bak : "!PROFIL_USER!
    	)
    	rem # Creation d'une nouvelle clef_profil comtenant Nom, Type et Donnees de la clef_profil.bak
    	reg add !PROFIL_USER! 
    	rem echo "TEST - Ajout OK"
    	rem # Ajout du contenu de clef_profil.bak vers clef_profil en forcant
        Reg save !PROFIL_BAK! ProfilBak.txt /y
    	rem echo "TEST - Sauvegarde OK"
    	Reg restore !PROFIL_USER! ProfilBak.txt
    	rem echo "TEST - Restauration OK"
    	rd ProfilBak.txt /s /q
    	rem # Suppression du profil.bak
    	reg delete !PROFIL_BAK! /f
    	rem echo "############## SUPPRESSION CLEF PROFIL.BAK ##############"
    	echo "                                    Profil.bak supprime                                           "	
    	echo "                              Profil User renomme correctement                                    "
    	echo "                                                                                                  "
    )
    pause
    cls
    echo "######################### Suppression du repertoire Temp dans 'C:\Users' #########################"
    echo "   Veuillez patienter...                                                                          "
    echo "                                                                                                  "
    rem echo "TEST - Affichage du repertoire Temp sur le poste distant : " %CHEMIN_REP_USER_TEMP%
    rem # Si le repertoire userTemp existe			
    if exist %CHEMIN_REP_USER_TEMP% (
    	rem # Alors suppresion du repertoire userTemp, ainsi que tous les sous-dossiers sans demander confirmation
    	rd %CHEMIN_REP_USER_TEMP% /s /q
    	echo "                     Repertoire Temp dans C:\Users trouve et supprime                             "
    	echo "                                                                                                  "
    )else (
    	echo "                        Pas de repertoire Temp trouve dans C:\Users                               "
    	echo "                                                                                                  "
    )
    pause
     
    rem ############## Fin de déclaration de permission de modification sur le pc distant ##############
    rem # Fin de modification sur la base de registre 
    sc \\%ADRESSE_IP% stop remoteregistry
    rem # Fin de modification sur des répertoires
    net use c: /delete 
    cls
     
    rem                                   ############## Final ##############
    echo "                        -- Batch Correctif_ProfilBak termine avec succes --                       "
    pause

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Salut,

    J'ai regardé vite fait et tu semble utiliser une variable non déclarée/initialisée.
    %REP_USER_TEMP% n'existe pas, vérifie que tous tes noms de variables sont correctes.

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    net use %REP_USER_TEMP% /user:%USER_ADMIN% %USER_MDP%

Discussions similaires

  1. batch sous windows xp pour recuperer les profils utilisateurs
    Par jioseng dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 28/12/2016, 11h43
  2. Profiler pour Java
    Par donde dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 10/02/2003, 17h36
  3. Verifier qu'un dossier existe (batch)
    Par kakou dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 08/01/2003, 13h46
  4. [API win32] Récupérer le répertoire d'un profile
    Par sbeu dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 27/09/2002, 12h38

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