Avant de me lancer dans un VBS de surveillance d'un dossier, je voudrais
savoir s'il existe une commande scriptable et native de windows (XP),
permettant d'interdire la modification d'un dossier.
J'entends par là:
1: Interdire l'ajout de fichiers et/ou sous-dossiers.
2: Interdire la suppression de fichiers et/ou sous-dossiers.
3: Mais permettre malgré tout l'accès à tous les fichiers, mais en lecture
seule.
En VBS, il existe bien la commande DateLastModified pour surveiller le
dossier (et l'attribut "lecture seule" pour les fichiers est paramétrable),
mais, celà ne me permettra pas par exemple d'interdire la suppression d'un
fichier. Je ne pourrai que le constater après coup, par le changement de
valeur de cette variable (DateLastModified). C'est mieux que rien, et je me
contenterai de ça si je ne trouve pas mieux, mais ça fait un peu
"bricolage", d'autant plus ( bon, ce n'est pas le pire) qu'il faut
instancier en permanence un script vbs, dédié à la surveillance du dossier.
Merci d'avance pour toutes infos, aide, et suggestions :-)
| Merci...mais... | ça n'a rien donné...pire, ça me lance la fenêtre de commandes et le | script en boucles infinies, tout les 1/10 de s. J'ai du redémarrer ma | session, avec bien du mal par Ctr Alt Supp. | Ouf !
Mince alors ! La seule méthode pour reproduire ce problème a consisté à créer un script avec le nom cacls.vbs !!! Et là, en effet, ça boucle ! Sinon, je ne vois pas comment trois lignes de code pourrait être récursive ! A moins bien sûr que vous nous cachiez quelque chose ;-) Pour info, j'ai testé ce script sur XP et Windows 2003 sans rencontrer le moindre problème.
| Entre temps, j'ai refais des tests. | Quand je lance la commande ci-dessous, par l'invite de cdes, ça | marche, je n'ai pas de confirm, et les droits du dossiers sont bien | modifés: | cacls C:test /P "toto":F /T < C:oui.txt
Normal
| Puis, la même cde, mais par Démarrer, exécuter, je vois fugitivement | une fenêtre de cde, mais les droits du dossier ne sont pas modifés, | donc, ça coince.
Normal également. Par le menu démarrer il faut entrer la ligne de commande suivante : %comspec% /c cacls C:test /P "toto":F /T < C:oui.txt
| Même comportement avec un oShell.Run dans un vbs.(je respecte bien | sûr la règle des doubles quotes, le problème ne vient pas de là)
Même en préfixant avec %comspec% La variable %comspec% pointe sur cmd.exe
| Ensuite je refais 2 tests, le 1er dans démarrer, exécuter, le 2e avec | un oShell.Run, en supprimant < C:oui.txt de la ligne. Là, ça | fonctionne dans les 2 cas, mais avec la demande de confirm, bien sûr.
Normal
| Je ne sais pas quoi en déduire, sinon, que les paramètres situés | après T ne sont compris que tapés directement dans l'invite de | commandes. | J'éspère avoir fait avancer le schmilblick !
Entrer la ligne suivante dans l'invite Démarrer->exécuter %comspec% /c cacls C:test /P "toto":F /T < C:oui.txt
-- Gilles LAURENT Me contacter : http://cerbermail.com/?zoTY7ZkLcD
"sympatix" <totosympatix@tototele2.fr> a écrit dans le message de
news:emsizux4GHA.4820@TK2MSFTNGP06.phx.gbl
| Merci...mais...
| ça n'a rien donné...pire, ça me lance la fenêtre de commandes et le
| script en boucles infinies, tout les 1/10 de s. J'ai du redémarrer ma
| session, avec bien du mal par Ctr Alt Supp.
| Ouf !
Mince alors ! La seule méthode pour reproduire ce problème a consisté à
créer un script avec le nom cacls.vbs !!! Et là, en effet, ça boucle !
Sinon, je ne vois pas comment trois lignes de code pourrait être
récursive ! A moins bien sûr que vous nous cachiez quelque chose ;-)
Pour info, j'ai testé ce script sur XP et Windows 2003 sans rencontrer
le moindre problème.
| Entre temps, j'ai refais des tests.
| Quand je lance la commande ci-dessous, par l'invite de cdes, ça
| marche, je n'ai pas de confirm, et les droits du dossiers sont bien
| modifés:
| cacls C:test /P "toto":F /T < C:oui.txt
Normal
| Puis, la même cde, mais par Démarrer, exécuter, je vois fugitivement
| une fenêtre de cde, mais les droits du dossier ne sont pas modifés,
| donc, ça coince.
Normal également.
Par le menu démarrer il faut entrer la ligne de commande suivante :
%comspec% /c cacls C:test /P "toto":F /T < C:oui.txt
| Même comportement avec un oShell.Run dans un vbs.(je respecte bien
| sûr la règle des doubles quotes, le problème ne vient pas de là)
Même en préfixant avec %comspec%
La variable %comspec% pointe sur cmd.exe
| Ensuite je refais 2 tests, le 1er dans démarrer, exécuter, le 2e avec
| un oShell.Run, en supprimant < C:oui.txt de la ligne. Là, ça
| fonctionne dans les 2 cas, mais avec la demande de confirm, bien sûr.
Normal
| Je ne sais pas quoi en déduire, sinon, que les paramètres situés
| après T ne sont compris que tapés directement dans l'invite de
| commandes.
| J'éspère avoir fait avancer le schmilblick !
Entrer la ligne suivante dans l'invite Démarrer->exécuter
%comspec% /c cacls C:test /P "toto":F /T < C:oui.txt
--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
| Merci...mais... | ça n'a rien donné...pire, ça me lance la fenêtre de commandes et le | script en boucles infinies, tout les 1/10 de s. J'ai du redémarrer ma | session, avec bien du mal par Ctr Alt Supp. | Ouf !
Mince alors ! La seule méthode pour reproduire ce problème a consisté à créer un script avec le nom cacls.vbs !!! Et là, en effet, ça boucle ! Sinon, je ne vois pas comment trois lignes de code pourrait être récursive ! A moins bien sûr que vous nous cachiez quelque chose ;-) Pour info, j'ai testé ce script sur XP et Windows 2003 sans rencontrer le moindre problème.
| Entre temps, j'ai refais des tests. | Quand je lance la commande ci-dessous, par l'invite de cdes, ça | marche, je n'ai pas de confirm, et les droits du dossiers sont bien | modifés: | cacls C:test /P "toto":F /T < C:oui.txt
Normal
| Puis, la même cde, mais par Démarrer, exécuter, je vois fugitivement | une fenêtre de cde, mais les droits du dossier ne sont pas modifés, | donc, ça coince.
Normal également. Par le menu démarrer il faut entrer la ligne de commande suivante : %comspec% /c cacls C:test /P "toto":F /T < C:oui.txt
| Même comportement avec un oShell.Run dans un vbs.(je respecte bien | sûr la règle des doubles quotes, le problème ne vient pas de là)
Même en préfixant avec %comspec% La variable %comspec% pointe sur cmd.exe
| Ensuite je refais 2 tests, le 1er dans démarrer, exécuter, le 2e avec | un oShell.Run, en supprimant < C:oui.txt de la ligne. Là, ça | fonctionne dans les 2 cas, mais avec la demande de confirm, bien sûr.
Normal
| Je ne sais pas quoi en déduire, sinon, que les paramètres situés | après T ne sont compris que tapés directement dans l'invite de | commandes. | J'éspère avoir fait avancer le schmilblick !
Entrer la ligne suivante dans l'invite Démarrer->exécuter %comspec% /c cacls C:test /P "toto":F /T < C:oui.txt
-- Gilles LAURENT Me contacter : http://cerbermail.com/?zoTY7ZkLcD
sympatix
Bonjour Gilles LAURENT, dans le message news:% tu nous disais:
Mince alors ! La seule méthode pour reproduire ce problème a consisté à créer un script avec le nom cacls.vbs !!! Et là, en effet, ça boucle !
Hum, hum...ben faut pas chercher plus loin, c'est justement comme ça que je l'ai appelé, le vbs :-D Un seul nom à éviter, et c'est justement celui que je choisi, c'est tout moi, ça ! ça y est, je viens de comprendre, L'interpreteur recherche le premier fichier nommé cacls, tombe sur le vbs et boucle ! A l'avenir, j'indiquerai le chemin absolu, pour éviter toute ambiguïté !
Ben, désolé pour le dérangement, et effectivement, après renommage, celà fonctionne maintenant à merveille !
PS: Le problème du batch évoqué plus haut doit être similaire, vu que, j'ose à peine le murmurer, dans ma grande sagesse, je l'avais nommé cacls.bat ! (non, non, pas les oreilles, pas les oreilles, aïe, aïe !)
Merci Gilles pour ton aide :-) -- Cordialement saint_path_x_arobase_t'es_laide_euh_point_fr
(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)
Bonjour Gilles LAURENT, dans le message
news:%232wv5Bz4GHA.3444@TK2MSFTNGP02.phx.gbl
tu nous disais:
Mince alors ! La seule méthode pour reproduire ce problème a consisté
à créer un script avec le nom cacls.vbs !!! Et là, en effet, ça
boucle !
Hum, hum...ben faut pas chercher plus loin, c'est justement comme ça que je
l'ai
appelé, le vbs :-D
Un seul nom à éviter, et c'est justement celui que je choisi, c'est tout
moi, ça !
ça y est, je viens de comprendre,
L'interpreteur recherche le premier fichier nommé cacls, tombe sur le vbs et
boucle !
A l'avenir, j'indiquerai le chemin absolu, pour éviter toute ambiguïté !
Ben, désolé pour le dérangement, et effectivement, après renommage, celà
fonctionne maintenant à merveille !
PS: Le problème du batch évoqué plus haut doit être similaire, vu que, j'ose
à peine le murmurer, dans ma grande sagesse, je l'avais nommé cacls.bat !
(non, non, pas les oreilles, pas les oreilles, aïe, aïe !)
Merci Gilles pour ton aide :-)
--
Cordialement
saint_path_x_arobase_t'es_laide_euh_point_fr
(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)
Bonjour Gilles LAURENT, dans le message news:% tu nous disais:
Mince alors ! La seule méthode pour reproduire ce problème a consisté à créer un script avec le nom cacls.vbs !!! Et là, en effet, ça boucle !
Hum, hum...ben faut pas chercher plus loin, c'est justement comme ça que je l'ai appelé, le vbs :-D Un seul nom à éviter, et c'est justement celui que je choisi, c'est tout moi, ça ! ça y est, je viens de comprendre, L'interpreteur recherche le premier fichier nommé cacls, tombe sur le vbs et boucle ! A l'avenir, j'indiquerai le chemin absolu, pour éviter toute ambiguïté !
Ben, désolé pour le dérangement, et effectivement, après renommage, celà fonctionne maintenant à merveille !
PS: Le problème du batch évoqué plus haut doit être similaire, vu que, j'ose à peine le murmurer, dans ma grande sagesse, je l'avais nommé cacls.bat ! (non, non, pas les oreilles, pas les oreilles, aïe, aïe !)
Merci Gilles pour ton aide :-) -- Cordialement saint_path_x_arobase_t'es_laide_euh_point_fr
(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)
sympatix
Bonjour Fred, dans le message news: tu nous disais:
As-tu essayé avec l'objet WshScriptExec ? C'est un objet retourné par la méthode Exec de l'objet WshShell et qui te donne l'accès aux flux StdIn, StdOut et StdErr. À partir de là, tu dois pouvoir faire un WriteLine de "O" dans le StdIn et valider ainsi la commande ? J'avoue que je n'ai pas eu le courage de tester avant de poster ! Nous avions eu une discussion il y a quelques temps à ce sujet. http://groups.google.fr/group/microsoft.public.fr.scripting/browse_frm/thread/a3f962890ac2ae3e/862ad80fc3dc1fef?#862ad80fc3dc1fef
Non, je n'ai pas essayé, vu que, tu pourra le constater dans ma réponse à Gilles, que j'ai trouvé ce qui faisait boucler le script, Ouf ! Mais, j'ai parcouru (en diagonale) le fil que tu donnes en référence, et j'essayerai cette méthode (si ça peut éviter l'utilisation d'un fichier tiers, c'est toujours bon à prendre). Si j'ai bien compris, c'est un peu le même principe que les "pipes" pour le batch, mais dans un vbs.
(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)
Bonjour Fred, dans le message
news:OT7172y4GHA.2464@TK2MSFTNGP06.phx.gbl
tu nous disais:
As-tu essayé avec l'objet WshScriptExec ?
C'est un objet retourné par la méthode Exec de l'objet WshShell et qui
te donne l'accès aux flux StdIn, StdOut et StdErr.
À partir de là, tu dois pouvoir faire un WriteLine de "O" dans le
StdIn et valider ainsi la commande ?
J'avoue que je n'ai pas eu le courage de tester avant de poster !
Nous avions eu une discussion il y a quelques temps à ce sujet.
http://groups.google.fr/group/microsoft.public.fr.scripting/browse_frm/thread/a3f962890ac2ae3e/862ad80fc3dc1fef?#862ad80fc3dc1fef
Non, je n'ai pas essayé, vu que, tu pourra le constater dans ma réponse à
Gilles, que j'ai trouvé ce qui faisait boucler le script, Ouf !
Mais, j'ai parcouru (en diagonale) le fil que tu donnes en référence, et
j'essayerai cette méthode (si ça peut éviter l'utilisation d'un fichier
tiers, c'est toujours bon à prendre).
Si j'ai bien compris, c'est un peu le même principe que les "pipes" pour le
batch, mais dans un vbs.
Bonjour Fred, dans le message news: tu nous disais:
As-tu essayé avec l'objet WshScriptExec ? C'est un objet retourné par la méthode Exec de l'objet WshShell et qui te donne l'accès aux flux StdIn, StdOut et StdErr. À partir de là, tu dois pouvoir faire un WriteLine de "O" dans le StdIn et valider ainsi la commande ? J'avoue que je n'ai pas eu le courage de tester avant de poster ! Nous avions eu une discussion il y a quelques temps à ce sujet. http://groups.google.fr/group/microsoft.public.fr.scripting/browse_frm/thread/a3f962890ac2ae3e/862ad80fc3dc1fef?#862ad80fc3dc1fef
Non, je n'ai pas essayé, vu que, tu pourra le constater dans ma réponse à Gilles, que j'ai trouvé ce qui faisait boucler le script, Ouf ! Mais, j'ai parcouru (en diagonale) le fil que tu donnes en référence, et j'essayerai cette méthode (si ça peut éviter l'utilisation d'un fichier tiers, c'est toujours bon à prendre). Si j'ai bien compris, c'est un peu le même principe que les "pipes" pour le batch, mais dans un vbs.
(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)
Gilles LAURENT
"sympatix" a écrit dans le message de news:
|| Mince alors ! La seule méthode pour reproduire ce problème a consisté || à créer un script avec le nom cacls.vbs !!! Et là, en effet, ça || boucle !
| Hum, hum...ben faut pas chercher plus loin, c'est justement comme ça | que je l'ai appelé, le vbs :-D | Un seul nom à éviter, et c'est justement celui que je choisi, c'est | tout moi, ça !
ROTFL
Merci pour ce retour
-- Gilles LAURENT Me contacter : http://cerbermail.com/?zoTY7ZkLcD
"sympatix" <totosympatix@tototele2.fr> a écrit dans le message de
news:OuDivA04GHA.3840@TK2MSFTNGP06.phx.gbl
|| Mince alors ! La seule méthode pour reproduire ce problème a consisté
|| à créer un script avec le nom cacls.vbs !!! Et là, en effet, ça
|| boucle !
| Hum, hum...ben faut pas chercher plus loin, c'est justement comme ça
| que je l'ai appelé, le vbs :-D
| Un seul nom à éviter, et c'est justement celui que je choisi, c'est
| tout moi, ça !
ROTFL
Merci pour ce retour
--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
|| Mince alors ! La seule méthode pour reproduire ce problème a consisté || à créer un script avec le nom cacls.vbs !!! Et là, en effet, ça || boucle !
| Hum, hum...ben faut pas chercher plus loin, c'est justement comme ça | que je l'ai appelé, le vbs :-D | Un seul nom à éviter, et c'est justement celui que je choisi, c'est | tout moi, ça !
ROTFL
Merci pour ce retour
-- Gilles LAURENT Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Fred
dans : news: sympatix disait :
Salut sympatix
Si j'ai bien compris, c'est un peu le même principe que les "pipes" pour le batch, mais dans un vbs.
oui, c'est ce principe même. Tout programme console fait normalement appel à ces flux pour ses opérations dE/S. En batch tu utilises la sortie d'un programme pour alimenter l'entrée d'un autre en écrivant A | B En vbs, l'équivalent serait wseB.StdIn.WriteLine(wseA.StdOut.ReadLine) (où wseA et wseB sont les objets WshScriptExec)
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
dans : news:OfugvF04GHA.3404@TK2MSFTNGP04.phx.gbl
sympatix disait :
Salut sympatix
Si j'ai bien compris, c'est un peu le même principe que les "pipes"
pour le batch, mais dans un vbs.
oui, c'est ce principe même. Tout programme console fait normalement
appel à ces flux pour ses opérations dE/S.
En batch tu utilises la sortie d'un programme pour alimenter l'entrée
d'un autre en écrivant A | B
En vbs, l'équivalent serait wseB.StdIn.WriteLine(wseA.StdOut.ReadLine)
(où wseA et wseB sont les objets WshScriptExec)
Si j'ai bien compris, c'est un peu le même principe que les "pipes" pour le batch, mais dans un vbs.
oui, c'est ce principe même. Tout programme console fait normalement appel à ces flux pour ses opérations dE/S. En batch tu utilises la sortie d'un programme pour alimenter l'entrée d'un autre en écrivant A | B En vbs, l'équivalent serait wseB.StdIn.WriteLine(wseA.StdOut.ReadLine) (où wseA et wseB sont les objets WshScriptExec)
-- Fred http://www.cerbermail.com/?3kA6ftaCvT
sympatix
Bonjour Fred, dans le message news: tu nous disais:
oui, c'est ce principe même. Tout programme console fait normalement appel à ces flux pour ses opérations dE/S. En batch tu utilises la sortie d'un programme pour alimenter l'entrée d'un autre en écrivant A | B En vbs, l'équivalent serait wseB.StdIn.WriteLine(wseA.StdOut.ReadLine) (où wseA et wseB sont les objets WshScriptExec) OK. Je pense que je orienterai vers cette méthode qui m'a l'air plus propre
qu'avec un fichier. Merci. -- Cordialement saint_path_x_arobase_t'es_laide_euh_point_fr
(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)
Bonjour Fred, dans le message
news:O8EGls44GHA.292@TK2MSFTNGP02.phx.gbl
tu nous disais:
oui, c'est ce principe même. Tout programme console fait normalement
appel à ces flux pour ses opérations dE/S.
En batch tu utilises la sortie d'un programme pour alimenter l'entrée
d'un autre en écrivant A | B
En vbs, l'équivalent serait wseB.StdIn.WriteLine(wseA.StdOut.ReadLine)
(où wseA et wseB sont les objets WshScriptExec)
OK. Je pense que je orienterai vers cette méthode qui m'a l'air plus propre
qu'avec un fichier.
Merci.
--
Cordialement
saint_path_x_arobase_t'es_laide_euh_point_fr
(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)
Bonjour Fred, dans le message news: tu nous disais:
oui, c'est ce principe même. Tout programme console fait normalement appel à ces flux pour ses opérations dE/S. En batch tu utilises la sortie d'un programme pour alimenter l'entrée d'un autre en écrivant A | B En vbs, l'équivalent serait wseB.StdIn.WriteLine(wseA.StdOut.ReadLine) (où wseA et wseB sont les objets WshScriptExec) OK. Je pense que je orienterai vers cette méthode qui m'a l'air plus propre
qu'avec un fichier. Merci. -- Cordialement saint_path_x_arobase_t'es_laide_euh_point_fr
(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)
sympatix
(Re)Bonjour !
Je voudrais être certain de la bonne exécution de cacls.exe, et pouvoir récupérer une éventuelle erreur. Je suppose que l'on peut utiliser la méthode "exec", mais je ne l'ai jamais fait, et ne sais pas du tout comment écrire le code. Pour résumer ce que fait actuellement le script (qui fonctionne à merveille), il lance "cacls.exe", et change les droits du dossier C:test, en se servant d'un fichier temporaire "oui.txt" pour valider la demande de confirm de cacls. Ci-dessous le script complet, auquel je souhaiterais ajouter la récupération d'erreur de cacls. Merci d'avance pour toute aide :-)
-------cacls2.vbs--coupez ici----- Set oShell = CreateObject("WScript.Shell") Win = oShell.ExpandEnvironmentStrings ("%windir%") Tempo = win & "temp" FOui = Tempo & "oui" & N & ".txt" Set oFSO = CreateObject("Scripting.FileSystemObject")
'-------change le nom du fichier temporaire "oui" s'il existe déjà While oFSO.FileExists (FOui) N = N + 1 FOui = Tempo & "oui" & N & ".txt" Wend
Set F = oFSO.CreatetextFile (FOui, True) F.Write "O" F.Close Cde = "%comspec% /c %systemroot%system32cacls.exe C:test /P ""toto"":R /T < " & FOui oShell.Run Cde, 0, True oFSO.DeleteFile (FOui) MsgBox "fini" -------cacls2.vbs--coupez ici----- -- Cordialement sympatix Antispam: Supprimer les "toto" pour me répondre
(Re)Bonjour !
Je voudrais être certain de la bonne exécution de cacls.exe, et pouvoir
récupérer une éventuelle erreur.
Je suppose que l'on peut utiliser la méthode "exec", mais je ne l'ai jamais
fait, et ne sais pas du tout comment écrire le code.
Pour résumer ce que fait actuellement le script (qui fonctionne à
merveille), il lance "cacls.exe", et change les droits du dossier C:test,
en se servant d'un fichier temporaire "oui.txt" pour valider la demande de
confirm de cacls.
Ci-dessous le script complet, auquel je souhaiterais ajouter la récupération
d'erreur de cacls.
Merci d'avance pour toute aide :-)
-------cacls2.vbs--coupez ici-----
Set oShell = CreateObject("WScript.Shell")
Win = oShell.ExpandEnvironmentStrings ("%windir%")
Tempo = win & "temp"
FOui = Tempo & "oui" & N & ".txt"
Set oFSO = CreateObject("Scripting.FileSystemObject")
'-------change le nom du fichier temporaire "oui" s'il existe déjà
While oFSO.FileExists (FOui)
N = N + 1
FOui = Tempo & "oui" & N & ".txt"
Wend
Set F = oFSO.CreatetextFile (FOui, True)
F.Write "O"
F.Close
Cde = "%comspec% /c %systemroot%system32cacls.exe C:test /P ""toto"":R /T
< " & FOui
oShell.Run Cde, 0, True
oFSO.DeleteFile (FOui)
MsgBox "fini"
-------cacls2.vbs--coupez ici-----
--
Cordialement
sympatix
Antispam: Supprimer les "toto" pour me répondre
Je voudrais être certain de la bonne exécution de cacls.exe, et pouvoir récupérer une éventuelle erreur. Je suppose que l'on peut utiliser la méthode "exec", mais je ne l'ai jamais fait, et ne sais pas du tout comment écrire le code. Pour résumer ce que fait actuellement le script (qui fonctionne à merveille), il lance "cacls.exe", et change les droits du dossier C:test, en se servant d'un fichier temporaire "oui.txt" pour valider la demande de confirm de cacls. Ci-dessous le script complet, auquel je souhaiterais ajouter la récupération d'erreur de cacls. Merci d'avance pour toute aide :-)
-------cacls2.vbs--coupez ici----- Set oShell = CreateObject("WScript.Shell") Win = oShell.ExpandEnvironmentStrings ("%windir%") Tempo = win & "temp" FOui = Tempo & "oui" & N & ".txt" Set oFSO = CreateObject("Scripting.FileSystemObject")
'-------change le nom du fichier temporaire "oui" s'il existe déjà While oFSO.FileExists (FOui) N = N + 1 FOui = Tempo & "oui" & N & ".txt" Wend
Set F = oFSO.CreatetextFile (FOui, True) F.Write "O" F.Close Cde = "%comspec% /c %systemroot%system32cacls.exe C:test /P ""toto"":R /T < " & FOui oShell.Run Cde, 0, True oFSO.DeleteFile (FOui) MsgBox "fini" -------cacls2.vbs--coupez ici----- -- Cordialement sympatix Antispam: Supprimer les "toto" pour me répondre
sympatix
J'ai remplacé vers la fin du code, où la ligne contient "run", par un "oShell.Exec", suivit d'une lecture de la variable "StdErr". ça a l'air de fonctionner. Est-ce la bonne méthode, ou bien y-a-t-il de petites choses à améliorer ? Merci :-) -------cacls2.vbs--coupez ici----- Set oShell = CreateObject("WScript.Shell") Win = oShell.ExpandEnvironmentStrings ("%windir%") Tempo = win & "temp" FOui = Tempo & "oui" & N & ".txt" Set oFSO = CreateObject("Scripting.FileSystemObject")
'----------change le nom du fichier temporaire "oui" s'il existe déjà While oFSO.FileExists (FOui) N = N + 1 FOui = Tempo & "oui" & N & ".txt" Wend
Set F = oFSO.CreatetextFile (FOui, True) F.Write "O" F.Close Cde = "%comspec% /c %systemroot%system32cacls.exe C:test /P ""toto"":r /T < " & FOui Set oExec = oShell.Exec (Cde) Erreurs = oExec.StdErr.ReadAll If Erreurs <> "" Then Msgbox Erreurs oFSO.DeleteFile (FOui) MsgBox "fini" -------cacls2.vbs--coupez ici-----
-- Cordialement sympatix Antispam: Supprimer les "toto" pour me répondre
J'ai remplacé vers la fin du code, où la ligne contient "run", par un
"oShell.Exec", suivit d'une lecture de la variable "StdErr".
ça a l'air de fonctionner. Est-ce la bonne méthode, ou bien y-a-t-il de
petites choses à améliorer ?
Merci :-)
-------cacls2.vbs--coupez ici-----
Set oShell = CreateObject("WScript.Shell")
Win = oShell.ExpandEnvironmentStrings ("%windir%")
Tempo = win & "temp"
FOui = Tempo & "oui" & N & ".txt"
Set oFSO = CreateObject("Scripting.FileSystemObject")
'----------change le nom du fichier temporaire "oui" s'il existe déjà
While oFSO.FileExists (FOui)
N = N + 1
FOui = Tempo & "oui" & N & ".txt"
Wend
Set F = oFSO.CreatetextFile (FOui, True)
F.Write "O"
F.Close
Cde = "%comspec% /c %systemroot%system32cacls.exe C:test /P ""toto"":r /T
< " & FOui
Set oExec = oShell.Exec (Cde)
Erreurs = oExec.StdErr.ReadAll
If Erreurs <> "" Then Msgbox Erreurs
oFSO.DeleteFile (FOui)
MsgBox "fini"
-------cacls2.vbs--coupez ici-----
--
Cordialement
sympatix
Antispam: Supprimer les "toto" pour me répondre
J'ai remplacé vers la fin du code, où la ligne contient "run", par un "oShell.Exec", suivit d'une lecture de la variable "StdErr". ça a l'air de fonctionner. Est-ce la bonne méthode, ou bien y-a-t-il de petites choses à améliorer ? Merci :-) -------cacls2.vbs--coupez ici----- Set oShell = CreateObject("WScript.Shell") Win = oShell.ExpandEnvironmentStrings ("%windir%") Tempo = win & "temp" FOui = Tempo & "oui" & N & ".txt" Set oFSO = CreateObject("Scripting.FileSystemObject")
'----------change le nom du fichier temporaire "oui" s'il existe déjà While oFSO.FileExists (FOui) N = N + 1 FOui = Tempo & "oui" & N & ".txt" Wend
Set F = oFSO.CreatetextFile (FOui, True) F.Write "O" F.Close Cde = "%comspec% /c %systemroot%system32cacls.exe C:test /P ""toto"":r /T < " & FOui Set oExec = oShell.Exec (Cde) Erreurs = oExec.StdErr.ReadAll If Erreurs <> "" Then Msgbox Erreurs oFSO.DeleteFile (FOui) MsgBox "fini" -------cacls2.vbs--coupez ici-----
-- Cordialement sympatix Antispam: Supprimer les "toto" pour me répondre
sympatix
Bonjour sympatix, dans le message news:OZ8% tu nous disais:
ça a l'air de fonctionner
Ben non, là, j'ai de nouveau un problème !
j'ai du mal à cerner d'ou ça vient, car le comportement est (semble ?) aléatoire. Ce que j'ai pu constater, c'est que le script fonctionne sur un dossier de 128 ko, mais j'ai un blocage de la fenêtre de Cscript quand j'essaye sur un dossier de 384 ko et au delà. J'ai désactivé la gestion d'erreur d'exec et c'est toujours pareil. C'est l'utilisation d'exec qui est en cause, puisqu'avec run, ça remarche, quelle que soit la taille du dossier. Peut-être que je n'utilise pas exec de la bonne façon, mais je ne sais pas comment faire autrement. Si quelqu'un avait une idée pour m'éclairer un peu ? Merci d'avance:-)
(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)
Bonjour sympatix, dans le message
news:OZ8%2337Y5GHA.856@TK2MSFTNGP03.phx.gbl
tu nous disais:
ça a l'air de fonctionner
Ben non, là, j'ai de nouveau un problème !
j'ai du mal à cerner d'ou ça vient, car le comportement est (semble ?)
aléatoire.
Ce que j'ai pu constater, c'est que le script fonctionne sur un dossier de
128 ko, mais j'ai un blocage de la fenêtre de Cscript quand j'essaye sur un
dossier de 384 ko et au delà.
J'ai désactivé la gestion d'erreur d'exec et c'est toujours pareil.
C'est l'utilisation d'exec qui est en cause, puisqu'avec run, ça remarche,
quelle que soit la taille du dossier.
Peut-être que je n'utilise pas exec de la bonne façon, mais je ne sais pas
comment faire autrement.
Si quelqu'un avait une idée pour m'éclairer un peu ?
Merci d'avance:-)
Bonjour sympatix, dans le message news:OZ8% tu nous disais:
ça a l'air de fonctionner
Ben non, là, j'ai de nouveau un problème !
j'ai du mal à cerner d'ou ça vient, car le comportement est (semble ?) aléatoire. Ce que j'ai pu constater, c'est que le script fonctionne sur un dossier de 128 ko, mais j'ai un blocage de la fenêtre de Cscript quand j'essaye sur un dossier de 384 ko et au delà. J'ai désactivé la gestion d'erreur d'exec et c'est toujours pareil. C'est l'utilisation d'exec qui est en cause, puisqu'avec run, ça remarche, quelle que soit la taille du dossier. Peut-être que je n'utilise pas exec de la bonne façon, mais je ne sais pas comment faire autrement. Si quelqu'un avait une idée pour m'éclairer un peu ? Merci d'avance:-)