sistema registro que guarda donde claves windows vbscript registry wmi

windows - guarda - que es el editor de registro



Obtener el nombre de usuario de los valores HKEY_USERS (7)

  1. Abra Reg HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Windows NT / CurrentVersion / ProfileList /

  2. hacer un ciclo para obtener todas las subclaves

  3. las subllaves con las que está interesado son las que comenzaron con [S-1-5-21-] que significa usuario (vea el nombre de la clave [ProfileImagePath] siempre se inician con una ruta c: / Users)

  4. Aquellos que comienzan con [S-1-5-21-12] son ​​todos usuarios locales

  5. Los que comienzan con [S-1-5-21-13] son ​​todos usuarios de la red [ si se unieron a la red con dominio ] que han iniciado sesión previamente en la máquina.

¿Hay alguna manera de conectar los valores en HKEY_USERS con el nombre de usuario actual?
Vi algunas preguntas similares, pero la mayoría (si no todas) habla sobre el código C #, y mi necesidad está en VBScript.


Al buscar mi ID de usuario en el registro, encontré

HKEY_CURRENT_USER/Volatile Environment/Username


Es posible consultar esta información desde WMI . El siguiente comando generará una tabla con una fila para cada usuario junto con el SID para cada usuario.

wmic useraccount get name,sid

También puede exportar esta información a CSV:

wmic useraccount get name,sid /format:csv > output.csv

Lo he usado en Vista y 7. Para más información, vea WMIC - Tome el control de la línea de comandos sobre WMI .


Hecho, por un poco de programación creativa,

  1. Enum the Keys en HKEY_USERS para esas divertidas teclas numéricas ...

  2. Enum las claves en HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Windows NT / CurrentVersion / ProfileList /

y encontrará los mismos números ... Ahora, en esas teclas, mire el valor String: ProfileImagePath = "SomeValue" donde los valores son:

"% systemroot% / system32 / config / systemprofile" ... no está interesado en este ... ya que no es una ruta de directorio ...

% SystemDrive% / Documents and Settings / LocalService - "Servicios locales"% SystemDrive% / Documents and Settings / NetworkService "NETWORK SERVICE"

o

% SystemDrive% / Documents and Settings / USER_NAME, que se traduce directamente en los valores de "USERNAME" en la mayoría de los sistemas no alterados, es decir. donde el usuario no ha cambiado su nombre de usuario después de unas semanas o ha modificado las rutas de forma explícita ...


Puede usar el comando PSGetSid del equipo SysInternals de Microsoft.

URL de descarga: http://technet.microsoft.com/en-gb/sysinternals/bb897417.aspx

Uso:

psgetsid [//computer[,computer[,...] | @file] [-u username [-p password]]] [account|SID] -u Specifies optional user name for login to remote computer. -p Specifies optional password for user name. If you omit this you will be prompted to enter a hidden password. Account PsGetSid will report the SID for the specified user account rather than the computer. SID PsGetSid will report the account for the specified SID. Computer Direct PsGetSid to perform the command on the remote computer or computers specified. If you omit the computer name PsGetSid runs the command on the local system, and if you specify a wildcard (//*), PsGetSid runs the command on all computers in the current domain. @file PsGetSid will execute the command on each of the computers listed in the file.

Ejemplo:

psgetsid S-1-5-21-583907252-682003330-839522115-63941

NÓTESE BIEN:

  • Cuando el usuario es un usuario de dominio / AD (LDAP), ejecutarlo en cualquier computadora del dominio debería dar los mismos resultados.
  • Cuando el usuario es local en la máquina, el comando debe ejecutarse en esa máquina, o debe especificar la computadora a través del parámetro opcional.

Actualizar

Si usa PowerShell, lo siguiente puede ser útil para resolver cualquier usuario de AD incluido en la lista:

#create a drive for HKEY USERS: New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS -ErrorAction SilentlyContinue #List all immediate subfolders #where they''re a folder (not a key) #and they''s an SID (i.e. exclude .DEFAULT and SID_Classes entries) #return the SID #and return the related AD entry (should one exist). Get-ChildItem -Path ''HKU:/' ` | ?{($_.PSIsContainer -eq $true) ` -and ($_.PSChildName -match ''^S-[/d-]+$'')} ` | select @{N=''SID'';E={$_.PSChildName}} ` , @{N=''Name'';E={Get-ADUser $_.PSChildName | select -expand Name}}

También podría refinar aún más el filtro SID para retirar solo esos SID que se resolverán en una cuenta AD si lo desea; más sobre la estructura de SID aquí: https://technet.microsoft.com/en-us/library/cc962011.aspx


Si observa cualquiera de las siguientes claves:
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/ProfileList HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/hivelist

Puede encontrar una lista de los SID allí con varios valores, incluidos los "home paths" que incluyen sus nombres de usuario.

No estoy seguro de cuán confiable es esto y no recomendaría jugar con esto a menos que esté realmente seguro de lo que está haciendo.


for /f "tokens=8 delims=/" %a in (''reg query "HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/hivelist" ^| find "UsrClass.dat"'') do echo %a