Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

XP : désactiver la surveillance d'un disque externe

8 réponses
Avatar
JF
Bonjour
Les disques externes ont tendance revenir en mode surveillance
(restauration système). La désactivation via les propriétés du système
n'est pas pratique. RestorWIN rend l'opération un peu plus facile, mais
il n'y a pas de commande.

Est-il possible de désactiver la surveillance
d'un disque amovible par script ?

L'état de la surveillance d'un disque est enregistré dans :
C:\System Volume Information\_restore<MachineGuid>\drivetable.txt

RestorWIN
http://www.gratilog.net/xoops/modules/mydownloads/singlefile.php?lid=1539
http://www.libellules.ch/dotclear/index.php?post/2007/07/31/2045-restorwin

Merci !

--
Salutations, Jean-François.

8 réponses

Avatar
Gilles LAURENT [MVP]
"JF" a écrit dans le message de
news:%
| Bonjour

Bonjour,

| Les disques externes ont tendance revenir en mode surveillance
| (restauration système). La désactivation via les propriétés du système
| n'est pas pratique. RestorWIN rend l'opération un peu plus facile,
| mais il n'y a pas de commande.
|
| Est-il possible de désactiver la surveillance
| d'un disque amovible par script ?

Avec la méthode Disable de la classe WMI SystemRestore.
Par exemple, pour désactiver la surveillance du disque D

--- Coupez ici : DisableSystemRestore.vbs ---
Set oSR=GetObject("winmgmts:/root/default:SystemRestore")
oSR.Disable("D:")
--- Coupez ici : DisableSystemRestore.vbs ---

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
JF
*Bonjour Gilles LAURENT [MVP] * !
<news:

"JF" a écrit dans le message de
news:%
Bonjour





Bonjour,



Les disques externes ont tendance revenir en mode surveillance
(restauration système). La désactivation via les propriétés du système
n'est pas pratique. RestorWIN rend l'opération un peu plus facile,
mais il n'y a pas de commande.

Est-il possible de désactiver la surveillance
d'un disque amovible par script ?





Avec la méthode Disable de la classe WMI SystemRestore.



Vu !
http://msdn.microsoft.com/en-us/library/aa378852(VS.85).aspx


Par exemple, pour désactiver la surveillance du disque D



--- Coupez ici : DisableSystemRestore.vbs ---
Set oSR=GetObject("winmgmts:/root/default:SystemRestore")
oSR.Disable("D:")
--- Coupez ici : DisableSystemRestore.vbs ---



Merci beaucoup !
J'ai modifié ainsi pour que le script désactive le disque amovible sur
lequel il est enregistré ==>

Set oSR=GetObject("winmgmts:/root/default:SystemRestore")
Set oFSO=CreateObject("Scripting.FileSystemObject")
Set oShell=CreateObject("Wscript.Shell")
strPath=oShell.CurrentDirectory
strDrive=oFSO.GetDriveName(strPath)
oSR.Disable(strDrive&"")

Une remarque ?

--
Salutations, Jean-François.
Avatar
Gilles LAURENT [MVP]
"JF" a écrit dans le message de
news:
| Merci beaucoup !
| J'ai modifié ainsi pour que le script désactive le disque amovible sur
| lequel il est enregistré ==>
|
| Set oSR=GetObject("winmgmts:/root/default:SystemRestore")
| Set oFSO=CreateObject("Scripting.FileSystemObject")
| Set oShell=CreateObject("Wscript.Shell")
| strPath=oShell.CurrentDirectory
| strDrive=oFSO.GetDriveName(strPath)
| oSR.Disable(strDrive&"")
|
| Une remarque ?

Super !

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
JF
*Bonjour Gilles LAURENT [MVP] * !
<news:#

"JF" a écrit dans le message de
news:
Merci beaucoup !
J'ai modifié ainsi pour que le script désactive le disque amovible sur
lequel il est enregistré ==>

Set oSR=GetObject("winmgmts:/root/default:SystemRestore")
Set oFSO=CreateObject("Scripting.FileSystemObject")
Set oShell=CreateObject("Wscript.Shell")
strPath=oShell.CurrentDirectory
strDrive=oFSO.GetDriveName(strPath)
oSR.Disable(strDrive&"")

Une remarque ?





Super !



:)
Ça va aller très bien avec ce que j'ai fait en batch pour changer
rapidement la lettre d'un volume amovible. Je ne suis pas sûr d'arriver
à le réécrire en VBS. Ça t'inspire ?

@echo off
color 1F
set volume=%~d0
set letter=%volume:~0,1%
echo.
echo Ce volume a la lettre = %letter% set /p NewLetter=Quelle est la nouvelle lettre a attribuer au lecteur
?
echo.
echo Vous avez choisi la lettre : %NewLetter%
echo.
if %NewLetter%=="" exit
if /i %NewLetter%==%letter% goto :sameletter
if exist %NewLetter%: goto :exist

set tp=%temp%tmp.cmd
set tx=%temp%tmp.txt
>%tp% echo mountvol %volume% /L^>%tx%
>>%tp% echo mountvol %volume% /D
>>%tp% echo for /f %%%%A in (%tx%) do set lecteur=%%%%A
>>%tp% echo mountvol %NewLetter%: %%lecteur%%
>>%tp% echo del %tx%
>>%tp% echo del %tp%
cd /d %temp%
%tp%

if exist %NewLetter%: mountvol %volume% /d
@pause
goto :eof
:sameletter
echo Ce lecteur a deja la lettre %letter%
@pause
goto :eof
:exist
echo %NewLetter%: n'est pas libre
@pause


C'est très inspiré d'exemples que j'ai trouvé dans ce NG :)
Ce batch doit fonctionner depuis le lecteur, c'est la raison de ces
redirections.

--
Salutations, Jean-François
Index de la FAQ XP de Panthère Noire : www.d2i.ch/pn/az
Comportement inattendu du PC :
http://support.microsoft.com/kb/827315/fr
Avatar
Gilles LAURENT [MVP]
"JF" a écrit dans le message de
news:e$
| Ça va aller très bien avec ce que j'ai fait en batch pour changer
| rapidement la lettre d'un volume amovible. Je ne suis pas sûr
| d'arriver à le réécrire en VBS. Ça t'inspire ?
[...]

Ci-dessous le portage de votre script batch en VBScript. Les
vérifications essentielles sont implémentées. L'utilisateur est prompté
tant que les vérifications échouent. Le script s'interrompt lorsque
l'utilisateur clique sur le bouton "Annuler" ou alors s'il entre la même
lettre de lecteur que celle actuellement utilisée par le périphérique
amovible.

Note: J'utilise également l'outil mountvol pour la manipulation des
volumes. Il est toutefois à noter que depuis Windows 2003 / Vista, les
méthodes de la classe WMI Win32_Volume permettent d'effectuer ces
opérations.

Win32_Volume Class :
http://msdn.microsoft.com/en-us/library/aa394515(VS.85).aspx

--- Coupez ici : ChangeDriveLetter.vbs ---
Set oSh=CreateObject("WScript.Shell")
Set oFs=CreateObject("Scripting.FileSystemObject")
If WScript.Arguments.Count=0 Then
Set oRe=New RegExp: oRe.Pattern="^([aA-zZ]:)$"
sTempFolder=oFs.GetSpecialFolder(2) & ""
sCurrentDrive=oFs.GetDriveName(oSh.CurrentDirectory)
Set oExec=oSh.Exec("mountvol " & sCurrentDrive & " /l")
sCurrentVolume=Replace(oExec.StdOut.ReadLine()," ", "")
Do While True
sNewDrive=InputBox( _
"The volume is currently mounted on drive " & sCurrentDrive & _
VBCrLf & VBCrLf & _
"Please enter a new drive letter :", "Change drive letter")
If sNewDrive = "" Or sNewDrive=sCurrentDrive Then WScript.Quit()
If oRe.Test(sNewDrive) And Not oFs.DriveExists(sNewDrive) Then
oFs.CopyFile WScript.ScriptFullName, sTempFolder, True
oSh.Run sTempFolder & WScript.ScriptName & " " & _
sCurrentDrive & " " & _
sCurrentVolume & " " & _
sNewDrive, 0, False
WScript.Quit()
End If
Loop
Else
oFs.DeleteFile WScript.ScriptFullName, True
sCurrentDrive=WScript.Arguments(0)
sCurrentVolume=WScript.Arguments(1)
sNewDrive=WScript.Arguments(2)
WScript.Sleep(1000)
oSh.Run "mountvol " & sCurrentDrive & " /d", 0, True
oSh.Run "mountvol " & sNewDrive & " " & sCurrentVolume, 0, True
End If
--- Coupez ici : ChangeDriveLetter.vbs ---

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
JF
*Bonjour Gilles LAURENT [MVP] * !
<news:

"JF" a écrit dans le message de
news:e$
Ça va aller très bien avec ce que j'ai fait en batch pour changer
rapidement la lettre d'un volume amovible. Je ne suis pas sûr
d'arriver à le réécrire en VBS. Ça t'inspire ?


[...]



Ci-dessous le portage de votre script batch en VBScript. Les
vérifications essentielles sont implémentées. L'utilisateur est prompté
tant que les vérifications échouent. Le script s'interrompt lorsque
l'utilisateur clique sur le bouton "Annuler" ou alors s'il entre la même
lettre de lecteur que celle actuellement utilisée par le périphérique
amovible.



Merci !

Note: J'utilise également l'outil mountvol pour la manipulation des
volumes. Il est toutefois à noter que depuis Windows 2003 / Vista, les
méthodes de la classe WMI Win32_Volume permettent d'effectuer ces
opérations.
Win32_Volume Class :
http://msdn.microsoft.com/en-us/library/aa394515(VS.85).aspx



C'est noté, merci de l'info.

--- Coupez ici : ChangeDriveLetter.vbs ---
Set oSh=CreateObject("WScript.Shell")
Set oFs=CreateObject("Scripting.FileSystemObject")
If WScript.Arguments.Count=0 Then
Set oRe=New RegExp: oRe.Pattern="^([aA-zZ]:)$"



Attention avec les courrielleurs, il faut afficher le texte brut pour
lire correctement la fin de la ligne ==> ] : ) $ "


sTempFolder=oFs.GetSpecialFolder(2) & ""
sCurrentDrive=oFs.GetDriveName(oSh.CurrentDirectory)
Set oExec=oSh.Exec("mountvol " & sCurrentDrive & " /l")
sCurrentVolume=Replace(oExec.StdOut.ReadLine()," ", "")
Do While True
sNewDrive=InputBox( _
"The volume is currently mounted on drive " & sCurrentDrive & _
VBCrLf & VBCrLf & _
"Please enter a new drive letter :", "Change drive letter")



If sNewDrive = "" Or sNewDrive=sCurrentDrive Then WScript.Quit()



Ça ne marchait pas, j'ai donc modifié ainsi :

If sNewDrive="" Then WScript.Quit()
sNewDrive=UCase(sNewDrive)
sNewDrive=sNewDrive&":"
If sNewDrive=sCurrentDrive Then WScript.Quit()

--
Salutations, Jean-François.
Avatar
Gilles LAURENT [MVP]
"JF" a écrit dans le message de
news:

[...]
| Ça ne marchait pas, j'ai donc modifié ainsi :
|
| If sNewDrive="" Then WScript.Quit()
| sNewDrive=UCase(sNewDrive)
| sNewDrive=sNewDrive&":"
| If sNewDrive=sCurrentDrive Then WScript.Quit()

Si la lettre de lecteur est entrée dans l'InputBox en respectant la
convention de nommage "X:" alors cela ne marche pas non plus car du coup
on se retrouve ici avec sNewDrive="X::" ;-). En fait je pense que la
condition ci-dessous est suffisante :
If sNewDrive="" Then WScript.Quit()

Car juste après nous avons :
If oRe.Test(sNewDrive) And Not oFs.DriveExists(sNewDrive) Then

- La casse n'a aucune importance
- La lettre de lecteur doit respecter la convention de nommage "X:"
- La lettre de lecteur ne doit pas être déjà montée

Merci pour ce retour.

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
JF
!
<news:

"JF" a écrit dans le message de
news:



[...]
Ça ne marchait pas, j'ai donc modifié ainsi :

If sNewDrive="" Then WScript.Quit()
sNewDrive=UCase(sNewDrive)
sNewDrive=sNewDrive&":"
If sNewDrive=sCurrentDrive Then WScript.Quit()





Si la lettre de lecteur est entrée dans l'InputBox en respectant la
convention de nommage "X:" alors cela ne marche pas non plus car du coup
on se retrouve ici avec sNewDrive="X::" ;-). En fait je pense que la
condition ci-dessous est suffisante :
If sNewDrive="" Then WScript.Quit()



Car juste après nous avons :
If oRe.Test(sNewDrive) And Not oFs.DriveExists(sNewDrive) Then



- La casse n'a aucune importance



C'était seulement pour passer le test bien sûr.



- La lettre de lecteur doit respecter la convention de nommage "X:"



En entrée le script demande une lettre; c'est donc, à mon sens, au
script de corriger selon que l'utilisateur a eu l'idée ou non d'ajouter
les deux-points. Je vais ajouter un test.



- La lettre de lecteur ne doit pas être déjà montée



Dans l'absolu il est inutile de vérifier si la lettre est déjà
utilisée. Dans le Batch je teste pour informer l'utilisateur s'il se
trompe.


Merci pour ce retour.



M E R C I Gilles.

--
Salutations, Jean-François
FAQ XP de Panthère Noire (index) : www.d2i.ch/pn/az
Un problème à montrer ? http://fspsa.free.fr/copiecran.htm
Outil : http://fspsa.free.fr/Presse-Papier_vers_Regedit.htm