SID in Variable auslesen
Hallo zusammen.
Ich möchte gerne die SID eines Benutzers, welchen ich vorher in eine Variable geschriben habe auslesen. Wie mache ich das am besten? Ich sollte die SID des Benutzers haben, damit ich in der Registry die richtigen Einträge setzen kann, da ich Remotemässig mit einem anderen Installationsbenutzer komme, aber etwas in die Registry des angemeldeten Benutzers schreiben muss.
Besten dank für eure Hilfe.
Ich möchte gerne die SID eines Benutzers, welchen ich vorher in eine Variable geschriben habe auslesen. Wie mache ich das am besten? Ich sollte die SID des Benutzers haben, damit ich in der Registry die richtigen Einträge setzen kann, da ich Remotemässig mit einem anderen Installationsbenutzer komme, aber etwas in die Registry des angemeldeten Benutzers schreiben muss.
Besten dank für eure Hilfe.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 44716
Url: https://administrator.de/forum/sid-in-variable-auslesen-44716.html
Ausgedruckt am: 22.12.2024 um 17:12 Uhr
8 Kommentare
Neuester Kommentar
Hi,
hier ein WMI Script.
Für dieses Script sind Adminrechte Vorraussetzung auf dem Rechner
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
arrComputers = Array("PC01") ' Hier den Namen oder die IP eintragen es gehen auch mehrere mit Komma getrennt
For Each strComputer In arrComputers
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount", "WQL", _
wbemFlagReturnImmediately + wbemFlagForwardOnly)
For Each objItem In colItems
WScript.Echo "Name: " & objItem.Name
WScript.Echo "SID: " & objItem.SID
Next
Next
Gruß MCSE_Cheffe
hier ein WMI Script.
Für dieses Script sind Adminrechte Vorraussetzung auf dem Rechner
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
arrComputers = Array("PC01") ' Hier den Namen oder die IP eintragen es gehen auch mehrere mit Komma getrennt
For Each strComputer In arrComputers
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount", "WQL", _
wbemFlagReturnImmediately + wbemFlagForwardOnly)
For Each objItem In colItems
WScript.Echo "Name: " & objItem.Name
WScript.Echo "SID: " & objItem.SID
Next
Next
Gruß MCSE_Cheffe
Moin cookie,
für eine Batch-Alternative brauchst Du zwar keine Admin-Rechte, aber eines der ??GetSID-Tools.
Mit den beiden bekanntesten liefe es so, wenn man/frau unterstellt:
- die Utilities sind auf %util%[ = z.B. set "util=\\utilserver\utils" abgelegt.
- der gesuchte User steht in %theUser%
- die SID soll in %theSID% gespeichert werden
a) GetSID.exe aus dem M$-Ressource-Kit [-------dazu wird auf den %logonserver% zurückgegriffen----]
im Batch:
b) psGetSid.exe vom SysInternals.com [-------auch dazu wird auf den %logonserver% zurückgegriffen----]
Gruß
Biber
für eine Batch-Alternative brauchst Du zwar keine Admin-Rechte, aber eines der ??GetSID-Tools.
Mit den beiden bekanntesten liefe es so, wenn man/frau unterstellt:
- die Utilities sind auf %util%[ = z.B. set "util=\\utilserver\utils" abgelegt.
- der gesuchte User steht in %theUser%
- die SID soll in %theSID% gespeichert werden
a) GetSID.exe aus dem M$-Ressource-Kit [-------dazu wird auf den %logonserver% zurückgegriffen----]
im Batch:
....
for /f "skip=2 tokens=7" %%i in ('%util%\getsid %logonserver% %theUser% %logonserver% %theUser%') do set "theSID=%%i"
....
for /f %%i in ('%util%\psgetsid %logonserver% %theUser% ^2^>nul^|find "S-"') do set "theSID=%%i"
Gruß
Biber
Moin cookie,
die variable %logonserver% sollte es ohnehin auf Deinem und jedem anderen M$-Rechner geben.
Bitte überprüf mal am CMD-Prompt
Nur bei M$-Drex-Utilitily, wo schon die Syntax so aussieht wie normaler ein Kindergeburtstag oder ein Karnevalslied brauchst Du den %logonserver$ wirklich. Siehe GetSID-Syntax auf M$-techNet
Bei psgetSID eigentlich nicht. Da kannst Du auch alternativ diese Syntax verwenden
ABER: wenn Du keinen %logonserver% angibst, wird die SID der aktuellen Maschine (also die SID auf DEINEM Rechner) ermittelt.
Und die ist sicherlich ungleich der SID in der Domäne.
Aber, however. eine %logonserver%-Variable ist bei M$ sogar auf Nicht-Domain-Rechnern verfügbar seit W2k. [*seufz* Wunderwelt Windows...]
Die beiden oberen Oneliner und die PsGetSID-Alternative hier unten sollten überall funktionieren.
Gruß
Biber
die variable %logonserver% sollte es ohnehin auf Deinem und jedem anderen M$-Rechner geben.
Bitte überprüf mal am CMD-Prompt
Set logonserver
Nur bei M$-Drex-Utilitily, wo schon die Syntax so aussieht wie normaler ein Kindergeburtstag oder ein Karnevalslied brauchst Du den %logonserver$ wirklich. Siehe GetSID-Syntax auf M$-techNet
Bei psgetSID eigentlich nicht. Da kannst Du auch alternativ diese Syntax verwenden
psGetSiD deineDomain\derUsername
Und die ist sicherlich ungleich der SID in der Domäne.
Aber, however. eine %logonserver%-Variable ist bei M$ sogar auf Nicht-Domain-Rechnern verfügbar seit W2k. [*seufz* Wunderwelt Windows...]
Die beiden oberen Oneliner und die PsGetSID-Alternative hier unten sollten überall funktionieren.
Gruß
Biber
Probier es schrittweise vorher am CMD-Prompt.
Start->Ausführen->cmd.
und wenn das klappt, diesen Befehl mit zwei "%%" vor der Zählvariablen i statt einem "%" in den Batch stellen. Und das ECHO vor dem SET rausnehmen.
Gruß
Biber
Start->Ausführen->cmd.
> psGetSid %logonserver% %theuser%
[....Ausgabe...]
(=13:53:19 D:\temp=)
>for /f %i in ('psgetsid %logonserver% %username% ^2^>nul^|find "S-"') do @echo set sid=%i
set sid=S-1-5-21-8915387-466359577-720635935-14711
(=13:53:44 D:\temp=)
Gruß
Biber