tagger tag windows wmi identity dns wmi-query

tag - ¿Cómo puedo recuperar el SID de una computadora con Windows usando WMI?



tag folders (3)

(Ooh, ¡fue divertido! Fui a una caza de ganso salvaje, como dicen, intentando obtener la instancia de Win32_SID, que es un singleton y no se puede enumerar por los métodos habituales de InstancesOf o Query ... yadda yadda yadda.)

Bueno, depende de qué computadora SID quieras (¡en serio!). Existe el SID que la computadora local usa para sí mismo ... Para esto, solo necesita obtener el SID del usuario administrador local y eliminar el "-500" del final para obtener el SID de la computadora.

En VBScript , se ve así:

strComputer = "AFAPC001" strUsername = "Administrator" Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/cimv2") Set objAccount = objWMIService.Get("Win32_UserAccount.Name=''" & strUsername & "'',Domain=''" & strComputer & "''") WScript.Echo "Administrator account SID: " & objAccount.SID WScript.Echo "Computer''s SID: " & Left(objAccount.SID, Len(objAccount.SID) - 4)

En PowerShell , así:

function get-sid { Param ( $DSIdentity ) $ID = new-object System.Security.Principal.NTAccount($DSIdentity) return $ID.Translate( [System.Security.Principal.SecurityIdentifier] ).toString() } > $admin = get-sid "Administrator" > $admin.SubString(0, $admin.Length - 4)

En C # en .NET 3.5:

using System; using System.Security.Principal; using System.DirectoryServices; using System.Linq; public static SecurityIdentifier GetComputerSid() { return new SecurityIdentifier((byte[])new DirectoryEntry(string.Format("WinNT://{0},Computer", Environment.MachineName)).Children.Cast<DirectoryEntry>().First().InvokeGet("objectSID"), 0).AccountDomainSid; }

Los resultados de todos estos coinciden con la respuesta que obtengo de PsGetSid.exe .

Por otro lado, está el SID que utiliza Active Directory para identificar cada equipo miembro del dominio ... El que obtenga al obtener el SID de la cuenta de la máquina en el dominio, el que termina con un signo de dólar.

Por ejemplo, al usar la función PowerShell anterior para un miembro del dominio llamado "CLIENTE", puede escribir get-sid "CLIENT$" .

No estoy buscando SID de usuario. Estoy buscando el SID de la computadora, que el directorio activo usaría para identificar de manera única la computadora. Tampoco quiero consultar el servidor de directorio activo, quiero consultar la computadora en sí.



Simplemente puede ejecutar la reg query HKLM/SOFTWARE/Microsoft/Cryptography /v MachineGuid desde la línea de comandos de Windows.

Aquí está el ejemplo del archivo por lotes de Windows:

set KEY_REGKEY=HKLM/SOFTWARE/Microsoft/Cryptography set KEY_REGVAL=MachineGuid REM Check for presence of key first. reg query %KEY_REGKEY% /v %KEY_REGVAL% 2>nul || (echo No theme name present! & exit /b 1) REM query the value. pipe it through findstr in order to find the matching line that has the value. only grab token 3 and the remainder of the line. %%b is what we are interested in here. set KEY_NAME= for /f "tokens=2,*" %%a in (''reg query %KEY_REGKEY% /v %KEY_REGVAL% ^| findstr %KEY_REGVAL%'') do ( set KEY_NAME=%%b ) echo %KEY_NAME%