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

Divers pb sur xcacls (et Subinacl)

2 réponses
Avatar
Trax
Bonjour,

voici ma problématique, suite à une migration, je dois faire le nettoyage
dans les droits ntfs.
il y a des comptes connus (DOMAIN\groupe) et des SID qui n'ont plus lieux
d'être utilisés pour les droits...

Avec SubInAcl, sauf erreur de ma part, on ne peut pas utiliser les SID?!

Je me suis donc tourné vers xcacls, et je rencontre 2 problèmes, j'ai un
script qui utilise les Subdirectory, grosso modo:

-----------------------------------------------------------------------
[...]
ShowSubfolders FSO.GetFolder(objShrPath)
Sub ShowSubFolders(Folder)
For Each Subfolder in Folder.SubFolders

WSHShell.run ("""" & sys32 & "\cscript.exe"" """ & xcacls & """ """ &
Subfolder & """ /t /e /r ""SID#S-1-5-21-1659004503-606747145-839522115-1178""
/r ""SID#S-1-5-21-1659004503-606747145-839522115-1179"" /r ""DOMAIN\USER"" /l
" & logFileXcacls)

MyLogFile.WriteLine ("""" & sys32 & "\cscript.exe"" """ & xcacls & """ """
& Subfolder & """ /t /e /r
""SID#S-1-5-21-1659004503-606747145-839522115-1178"" /r
""SID#S-1-5-21-1659004503-606747145-839522115-1179"" /r ""DOMAIN\USER"" /l "
& logFileXcacls)
MyLogFile.WriteLine ("Erreur :" & Err.Number & Err.Description)

WScript.sleep 3000

ShowSubFolders Subfolder
Next
End Sub
[...]
-----------------------------------------------------------------------

Les variables sont correctes.
Seulement tous les dossiers ne sont pas traités apparemment! Il me semble
que si une commande est trop longue, celles qui sont lancées ensuite ne sont
pas prises en compte (du moins celles qui tentent de se lancer avant la fin
de cette "longue" commande).

J'ai également 2 log, d'un coté les commandes qui sont envoyées (ce qui
donne de tête : "c:\win\sys32\cscript.exe" "c:\script\xcacls.vbs" "d:\folder"
/t /e /r "SID#S-1-5-21-1659004503-606747145-839522115-1178" /r
"SID#S-1-5-21-1659004503-606747145-839522115-1179" /r "DOMAIN\USER" /l
"c:\log.txt" ) et un autre qui est celui de xcacls.
Dans le 1er log, il m'indique bien toute les commandes, mais dans le log de
xcacls, il y en a beaucoup moins! ce qui me fait revenir sur l'idée qu'il
faut limiter à une commande.

De plus, err.number et err.description me retournent systématiquement "0"

Définir le wscript.sleep à une grande valeur ne me semble pas être propre...
Comment faire pour définir la fin du WSHShell.run avant le lancement de la
suivante??


Merci
Trax
ps: existe-t-il une solution plus simple? :D

2 réponses

Avatar
jbongran
Trax wrote:
Bonjour,

voici ma problématique, suite à une migration, je dois faire le
nettoyage dans les droits ntfs.
il y a des comptes connus (DOMAINgroupe) et des SID qui n'ont plus
lieux d'être utilisés pour les droits...

Avec SubInAcl, sauf erreur de ma part, on ne peut pas utiliser les
SID?!

Je me suis donc tourné vers xcacls, et je rencontre 2 problèmes, j'ai
un script qui utilise les Subdirectory, grosso modo:

-----------------------------------------------------------------------
[...]
ShowSubfolders FSO.GetFolder(objShrPath)
Sub ShowSubFolders(Folder)
For Each Subfolder in Folder.SubFolders

WSHShell.run ("""" & sys32 & "cscript.exe"" """ & xcacls & """ """ &
Subfolder & """ /t /e /r
""SID#S-1-5-21-1659004503-606747145-839522115-1178"" /r
""SID#S-1-5-21-1659004503-606747145-839522115-1179"" /r
""DOMAINUSER"" /l " & logFileXcacls)

MyLogFile.WriteLine ("""" & sys32 & "cscript.exe"" """ & xcacls &
""" """ & Subfolder & """ /t /e /r
""SID#S-1-5-21-1659004503-606747145-839522115-1178"" /r
""SID#S-1-5-21-1659004503-606747145-839522115-1179"" /r
""DOMAINUSER"" /l " & logFileXcacls)
MyLogFile.WriteLine ("Erreur :" & Err.Number & Err.Description)

WScript.sleep 3000

ShowSubFolders Subfolder
Next
End Sub
[...]
-----------------------------------------------------------------------

Les variables sont correctes.
Seulement tous les dossiers ne sont pas traités apparemment! Il me
semble que si une commande est trop longue, celles qui sont lancées
ensuite ne sont pas prises en compte (du moins celles qui tentent de
se lancer avant la fin de cette "longue" commande).

J'ai également 2 log, d'un coté les commandes qui sont envoyées (ce
qui donne de tête : "c:winsys32cscript.exe" "c:scriptxcacls.vbs"
"d:folder" /t /e /r
"SID#S-1-5-21-1659004503-606747145-839522115-1178" /r
"SID#S-1-5-21-1659004503-606747145-839522115-1179" /r "DOMAINUSER"
/l "c:log.txt" ) et un autre qui est celui de xcacls.
Dans le 1er log, il m'indique bien toute les commandes, mais dans le
log de xcacls, il y en a beaucoup moins! ce qui me fait revenir sur
l'idée qu'il faut limiter à une commande.

De plus, err.number et err.description me retournent systématiquement
"0"

Définir le wscript.sleep à une grande valeur ne me semble pas être
propre... Comment faire pour définir la fin du WSHShell.run avant le
lancement de la suivante??


Merci
Trax
ps: existe-t-il une solution plus simple? :D


Supprimer le wscript.sleep et attendre la fin de chaque commande ?
La méthode run sans paramètre autre que la ligne de commande à exécuter
retourne immédiatement la main au script, avec un pseudo code de retour
toujours a 0, à ne pas confondre avec les codes de retour utilisés si le
paramètre bWaitOnReturn est positionné à True. En gros, très gros même:
strCmd = """" & sys32 & "cscript.exe"" """ & xcacls & """ """ & Subfolder &
""" /t /e /r ""SID#S-1-5-21-1659004503-606747145-839522115-1178"" /r
""SID#S-1-5-21-1659004503-606747145-839522115-1179"" /r ""DOMAINUSER"" /l "
& logFileXcacls
strReturn = WSHShell.run (strCmd, 1, True)

MyLogFile.WriteLine (strCmd & ",1, True")
MyLogFile.WriteLine "Code de sortie: " & strReturn

Avatar
Gilles LAURENT
"Trax" a écrit dans le message de
news:
| Bonjour,

Bonjour,

| voici ma problématique, suite à une migration, je dois faire le
| nettoyage dans les droits ntfs.
| il y a des comptes connus (DOMAINgroupe) et des SID qui n'ont plus
| lieux d'être utilisés pour les droits...
|
| Avec SubInAcl, sauf erreur de ma part, on ne peut pas utiliser les
| SID?!
[...]

L'outil subinacl gère parfaitement bien les SIDs. Si vous souhaitez
supprimer les SIDs non résolus dans le nouveau domaine alors la vous
devriez utiliser la commande suivante :
> subinacl /subdirectories <root_folder>
/cleandeletedsidsfrom=<old_domain>

--
Gilles LAURENT
http://glsft.free.fr