"Bouby6Killer" a écrit dans le
message de news:
| Bonjour,
Bonjour,
| Je souhaiterais pouvoir traduire les clés SID de la base de
| registre sous la branche HKEY_USERS afin d'obtenir les noms
| d'utilisateurs correspondants. De plus, il faudrait que la sortie
| soit récupérée dans un fichier texte afin de pouvoir être exploitée
| par mon application en Pascal. Si quelqu'un a une idée, je l'en
| remercie d'avance ;)
-- Coupez ici : Lookup.vbs --
Option Explicit
' déclaration des variables
Dim objWMI, objReg, objAccnt
Dim dicSID, colItems, arrSubKeys
Dim item, subkey
' initialisation
Set dicSID = CreateObject ("Scripting.Dictionary")
Set objWMI = GetObject ("winmgmts:rootcimv2")
Set objReg = GetObject ("winmgmts:rootdefault:StdRegProv")
' lecture de tous les sid et constitution d'un dictionnaire
Set colItems = _
objWMI.ExecQuery ("select * from Win32_AccountSID",,48)
For Each item in colItems
Set objAccnt = GetObject ("winmgmts:" & item.Element)
If Not dicSID.Exists (objAccnt.SID) Then _
dicSID.Add objAccnt.SID, objAccnt.Name
Next
' énumération des sous-clés HKEY_USERS
' et conversion des SID en Nom en s'appuyant sur le dictionnaire
objReg.EnumKey &H80000003, "", arrSubKeys
For Each subkey In arrSubKeys
If IsNumeric (Right (subkey,1)) Then
WScript.Echo subkey & "," & dicSID.Item (subkey)
End If
Next
-- Coupez ici : Lookup.vbs --
Pour exécuter le script :
>cscript //nologo Lookup.vbs > Lookup.sid
Le format de sortie sera le suivant :
sid1,compte_utilisateur
sid2,compte_utilisateur
--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
"Bouby6Killer" <Bouby6Killer@discussions.microsoft.com> a écrit dans le
message de news:7C1E6642-7089-4E80-9EBD-04DD7D0E099B@microsoft.com
| Bonjour,
Bonjour,
| Je souhaiterais pouvoir traduire les clés SID de la base de
| registre sous la branche HKEY_USERS afin d'obtenir les noms
| d'utilisateurs correspondants. De plus, il faudrait que la sortie
| soit récupérée dans un fichier texte afin de pouvoir être exploitée
| par mon application en Pascal. Si quelqu'un a une idée, je l'en
| remercie d'avance ;)
-- Coupez ici : Lookup.vbs --
Option Explicit
' déclaration des variables
Dim objWMI, objReg, objAccnt
Dim dicSID, colItems, arrSubKeys
Dim item, subkey
' initialisation
Set dicSID = CreateObject ("Scripting.Dictionary")
Set objWMI = GetObject ("winmgmts:rootcimv2")
Set objReg = GetObject ("winmgmts:rootdefault:StdRegProv")
' lecture de tous les sid et constitution d'un dictionnaire
Set colItems = _
objWMI.ExecQuery ("select * from Win32_AccountSID",,48)
For Each item in colItems
Set objAccnt = GetObject ("winmgmts:" & item.Element)
If Not dicSID.Exists (objAccnt.SID) Then _
dicSID.Add objAccnt.SID, objAccnt.Name
Next
' énumération des sous-clés HKEY_USERS
' et conversion des SID en Nom en s'appuyant sur le dictionnaire
objReg.EnumKey &H80000003, "", arrSubKeys
For Each subkey In arrSubKeys
If IsNumeric (Right (subkey,1)) Then
WScript.Echo subkey & "," & dicSID.Item (subkey)
End If
Next
-- Coupez ici : Lookup.vbs --
Pour exécuter le script :
>cscript //nologo Lookup.vbs > Lookup.sid
Le format de sortie sera le suivant :
sid1,compte_utilisateur
sid2,compte_utilisateur
--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
"Bouby6Killer" a écrit dans le
message de news:
| Bonjour,
Bonjour,
| Je souhaiterais pouvoir traduire les clés SID de la base de
| registre sous la branche HKEY_USERS afin d'obtenir les noms
| d'utilisateurs correspondants. De plus, il faudrait que la sortie
| soit récupérée dans un fichier texte afin de pouvoir être exploitée
| par mon application en Pascal. Si quelqu'un a une idée, je l'en
| remercie d'avance ;)
-- Coupez ici : Lookup.vbs --
Option Explicit
' déclaration des variables
Dim objWMI, objReg, objAccnt
Dim dicSID, colItems, arrSubKeys
Dim item, subkey
' initialisation
Set dicSID = CreateObject ("Scripting.Dictionary")
Set objWMI = GetObject ("winmgmts:rootcimv2")
Set objReg = GetObject ("winmgmts:rootdefault:StdRegProv")
' lecture de tous les sid et constitution d'un dictionnaire
Set colItems = _
objWMI.ExecQuery ("select * from Win32_AccountSID",,48)
For Each item in colItems
Set objAccnt = GetObject ("winmgmts:" & item.Element)
If Not dicSID.Exists (objAccnt.SID) Then _
dicSID.Add objAccnt.SID, objAccnt.Name
Next
' énumération des sous-clés HKEY_USERS
' et conversion des SID en Nom en s'appuyant sur le dictionnaire
objReg.EnumKey &H80000003, "", arrSubKeys
For Each subkey In arrSubKeys
If IsNumeric (Right (subkey,1)) Then
WScript.Echo subkey & "," & dicSID.Item (subkey)
End If
Next
-- Coupez ici : Lookup.vbs --
Pour exécuter le script :
>cscript //nologo Lookup.vbs > Lookup.sid
Le format de sortie sera le suivant :
sid1,compte_utilisateur
sid2,compte_utilisateur
--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
| Apparemment c'est l'énumération des instances de la
| classe Win32_AccountSID qui bloque sur les SID du domaine. Si je suis
| déconnecté le script se termine correctement au bout de 30 secondes à
| 1 minute, mais dans ce cas il ne résoud pas les SID correspondant à
| des comptes du domaine.
En mode déconnecté, c'est exact, les SID de domaine ne sont pas résolus.
Pour ce qui est des performances, elles ne sont en effet pas au
rendez-vous ;-) La constitution du dictionnaire avec tous les SID
(domaine et locaux) était la seule solution pour écrire le script sans
utiliser d'outil externe.
Et en batch en une seule ligne (testé sous XP SP1/SP2) :
-- Coupez ici : lookup.cmd --
@for /f "delims= tokens=2" %%i in ('reg query hku ^| find "S-1" ^| find
/v "Classes"') do @for /f "delims=," %%j in ('sid2name %%i') do @echo
%%i,%%j
-- Coupez ici : lookup.cmd --
| Apparemment c'est l'énumération des instances de la
| classe Win32_AccountSID qui bloque sur les SID du domaine. Si je suis
| déconnecté le script se termine correctement au bout de 30 secondes à
| 1 minute, mais dans ce cas il ne résoud pas les SID correspondant à
| des comptes du domaine.
En mode déconnecté, c'est exact, les SID de domaine ne sont pas résolus.
Pour ce qui est des performances, elles ne sont en effet pas au
rendez-vous ;-) La constitution du dictionnaire avec tous les SID
(domaine et locaux) était la seule solution pour écrire le script sans
utiliser d'outil externe.
Et en batch en une seule ligne (testé sous XP SP1/SP2) :
-- Coupez ici : lookup.cmd --
@for /f "delims= tokens=2" %%i in ('reg query hku ^| find "S-1" ^| find
/v "Classes"') do @for /f "delims=," %%j in ('sid2name %%i') do @echo
%%i,%%j
-- Coupez ici : lookup.cmd --
| Apparemment c'est l'énumération des instances de la
| classe Win32_AccountSID qui bloque sur les SID du domaine. Si je suis
| déconnecté le script se termine correctement au bout de 30 secondes à
| 1 minute, mais dans ce cas il ne résoud pas les SID correspondant à
| des comptes du domaine.
En mode déconnecté, c'est exact, les SID de domaine ne sont pas résolus.
Pour ce qui est des performances, elles ne sont en effet pas au
rendez-vous ;-) La constitution du dictionnaire avec tous les SID
(domaine et locaux) était la seule solution pour écrire le script sans
utiliser d'outil externe.
Et en batch en une seule ligne (testé sous XP SP1/SP2) :
-- Coupez ici : lookup.cmd --
@for /f "delims= tokens=2" %%i in ('reg query hku ^| find "S-1" ^| find
/v "Classes"') do @for /f "delims=," %%j in ('sid2name %%i') do @echo
%%i,%%j
-- Coupez ici : lookup.cmd --
"Gilles LAURENT" a écrit dans le message de news:
<...>| Apparemment c'est l'énumération des instances de la
| classe Win32_AccountSID qui bloque sur les SID du domaine. Si je suis
| déconnecté le script se termine correctement au bout de 30 secondes à
| 1 minute, mais dans ce cas il ne résoud pas les SID correspondant à
| des comptes du domaine.
En mode déconnecté, c'est exact, les SID de domaine ne sont pas résolus.
Pour ce qui est des performances, elles ne sont en effet pas au
rendez-vous ;-) La constitution du dictionnaire avec tous les SID
(domaine et locaux) était la seule solution pour écrire le script sans
utiliser d'outil externe.
Je n'ai pas vraiment isolé la cause de la lenteur avec certitude.
L'énumération des instances de Win32_Account (ou de Win32_AccountSID)
mettait beaucoup plus de temps hier lors de mes tests. Aujourd'hui c'est
un peu plus vif, peut-être un effet "cache"? Je referai des tests plus
poussés à l'occasion.
<...>Et en batch en une seule ligne (testé sous XP SP1/SP2) :
-- Coupez ici : lookup.cmd --
@for /f "delims= tokens=2" %%i in ('reg query hku ^| find "S-1" ^| find
/v "Classes"') do @for /f "delims=," %%j in ('sid2name %%i') do @echo
%%i,%%j
-- Coupez ici : lookup.cmd --
J'hésite toujours à utiliser des commandes externes car je dépend alors
fortement du format de leur affichage dans mon analyse des données. Mais
après tout, j'ai déjà changé la donne en introduisant sid2name.exe, et
puis reg.exe est une commande standard sous XP! Alors voici une adaptation
de mes deux lignes PowerShell en une seule grâce à reg et sid2name:
reg query hku | % {if ($_ -match "S-.+d$") {"{0},{1}" -f $matches[0],
(sid2name $matches[0]).split(",")[0]}}
Jacques
"Gilles LAURENT" <glsft@free.fr> a écrit dans le message de news:
u3xGw8SyGHA.4044@TK2MSFTNGP04.phx.gbl...
<...>
| Apparemment c'est l'énumération des instances de la
| classe Win32_AccountSID qui bloque sur les SID du domaine. Si je suis
| déconnecté le script se termine correctement au bout de 30 secondes à
| 1 minute, mais dans ce cas il ne résoud pas les SID correspondant à
| des comptes du domaine.
En mode déconnecté, c'est exact, les SID de domaine ne sont pas résolus.
Pour ce qui est des performances, elles ne sont en effet pas au
rendez-vous ;-) La constitution du dictionnaire avec tous les SID
(domaine et locaux) était la seule solution pour écrire le script sans
utiliser d'outil externe.
Je n'ai pas vraiment isolé la cause de la lenteur avec certitude.
L'énumération des instances de Win32_Account (ou de Win32_AccountSID)
mettait beaucoup plus de temps hier lors de mes tests. Aujourd'hui c'est
un peu plus vif, peut-être un effet "cache"? Je referai des tests plus
poussés à l'occasion.
<...>
Et en batch en une seule ligne (testé sous XP SP1/SP2) :
-- Coupez ici : lookup.cmd --
@for /f "delims= tokens=2" %%i in ('reg query hku ^| find "S-1" ^| find
/v "Classes"') do @for /f "delims=," %%j in ('sid2name %%i') do @echo
%%i,%%j
-- Coupez ici : lookup.cmd --
J'hésite toujours à utiliser des commandes externes car je dépend alors
fortement du format de leur affichage dans mon analyse des données. Mais
après tout, j'ai déjà changé la donne en introduisant sid2name.exe, et
puis reg.exe est une commande standard sous XP! Alors voici une adaptation
de mes deux lignes PowerShell en une seule grâce à reg et sid2name:
reg query hku | % {if ($_ -match "S-.+d$") {"{0},{1}" -f $matches[0],
(sid2name $matches[0]).split(",")[0]}}
Jacques
"Gilles LAURENT" a écrit dans le message de news:
<...>| Apparemment c'est l'énumération des instances de la
| classe Win32_AccountSID qui bloque sur les SID du domaine. Si je suis
| déconnecté le script se termine correctement au bout de 30 secondes à
| 1 minute, mais dans ce cas il ne résoud pas les SID correspondant à
| des comptes du domaine.
En mode déconnecté, c'est exact, les SID de domaine ne sont pas résolus.
Pour ce qui est des performances, elles ne sont en effet pas au
rendez-vous ;-) La constitution du dictionnaire avec tous les SID
(domaine et locaux) était la seule solution pour écrire le script sans
utiliser d'outil externe.
Je n'ai pas vraiment isolé la cause de la lenteur avec certitude.
L'énumération des instances de Win32_Account (ou de Win32_AccountSID)
mettait beaucoup plus de temps hier lors de mes tests. Aujourd'hui c'est
un peu plus vif, peut-être un effet "cache"? Je referai des tests plus
poussés à l'occasion.
<...>Et en batch en une seule ligne (testé sous XP SP1/SP2) :
-- Coupez ici : lookup.cmd --
@for /f "delims= tokens=2" %%i in ('reg query hku ^| find "S-1" ^| find
/v "Classes"') do @for /f "delims=," %%j in ('sid2name %%i') do @echo
%%i,%%j
-- Coupez ici : lookup.cmd --
J'hésite toujours à utiliser des commandes externes car je dépend alors
fortement du format de leur affichage dans mon analyse des données. Mais
après tout, j'ai déjà changé la donne en introduisant sid2name.exe, et
puis reg.exe est une commande standard sous XP! Alors voici une adaptation
de mes deux lignes PowerShell en une seule grâce à reg et sid2name:
reg query hku | % {if ($_ -match "S-.+d$") {"{0},{1}" -f $matches[0],
(sid2name $matches[0]).split(",")[0]}}
Jacques
"Fred" a écrit dans le message de
news:%Bonjour,
Bonjour,
[...]Ensuite je fais 'appel à Win32_SID.SID pour récupérer le compte.
Bien vu Fred ;-)
Du coup les performances sont bien meilleurs !
"Fred" <foleide@libre.france> a écrit dans le message de
news:%23ahhhfbyGHA.4232@TK2MSFTNGP05.phx.gbl
Bonjour,
Bonjour,
[...]
Ensuite je fais 'appel à Win32_SID.SID pour récupérer le compte.
Bien vu Fred ;-)
Du coup les performances sont bien meilleurs !
"Fred" a écrit dans le message de
news:%Bonjour,
Bonjour,
[...]Ensuite je fais 'appel à Win32_SID.SID pour récupérer le compte.
Bien vu Fred ;-)
Du coup les performances sont bien meilleurs !