Frage

Ich versuche, herauszufinden, wie zu erkennen, ob ein Benutzer mit Admin-Rechten unter Windows XP läuft. Das ist ziemlich einfach in Vista / Win7 dank dem whoami Befehl zu tun. Hier ist ein Ausschnitt in Ruby, wie es unter Vista zu tun:

Hinweis: der folgende Link bietet nun die Lösung von muteW vorgeschlagen

http://gist.github.com/65931

Das Problem ist, whoami nicht mit Windows XP kommt und so die oben verlinkte Methode wird immer false zurück auf WinXP, auch wenn wir als Administrator ausführen.

mit Ruby, Kommandozeilen-Tool, Batch-Dateien oder sogar Dritt

Also, kennt jemand eine Möglichkeit zu erkennen, ob wir als Admin unter Windows XP laufen lassen (muss Open Source sein, wirklich) Tools?

War es hilfreich?

Lösung

Dieser erkennt, ob der Benutzer in erweiterten Modus (zB eine Eingabeaufforderung, die „Ausführen als“ Administrator war) ausgeführt wird. Es beruht auf der Tatsache, dass Sie Administratorrechte benötigen den lokalen Dienstkonto Ausrichtungs-Schlüssel zu lesen:

reg query "HKU\S-1-5-19"

Dies wird einen Nicht-Null-Fehlercode zurück, wenn es nicht gelesen werden kann, und Null, wenn er kann.
Arbeiten von XP bis ...

Andere Tipps

Wenn Sie ausführen

>net localgroup administrators 

in einem Kommando-Shell sollten Sie die Liste der Administratorkonten in Windows XP erhalten. Einfach analysieren und die Ausgabe-Scan für das jeweilige Benutzerkonto zu überprüfen, die Sie wollen. Für z.B. wenn der aktuelle Benutzer zu überprüfen, ist ein Administrator Sie tun können -

>net localgroup administrators | find "%USERNAME%"

Piskvor Option seine feine, oder überprüfen Sie diese URL http: // weseetips. com / 2008/04/16 / how-to-Check-ob-Strom-user-have-Administrator-Privileg /

Dies ist der Code in der Seite

SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
PSID AdministratorsGroup;
// Initialize SID.
if( !AllocateAndInitializeSid( &NtAuthority,
                               2,
                               SECURITY_BUILTIN_DOMAIN_RID,
                               DOMAIN_ALIAS_RID_ADMINS,
                               0, 0, 0, 0, 0, 0,
                               &AdministratorsGroup))
{
    // Initializing SID Failed.
    return false;
}
// Check whether the token is present in admin group.
BOOL IsInAdminGroup = FALSE;
if( !CheckTokenMembership( NULL,
                           AdministratorsGroup,
                           &IsInAdminGroup ))
{
    // Error occurred.
    IsInAdminGroup = FALSE;
}
// Free SID and return.
FreeSid(AdministratorsGroup);
return IsInAdminGroup;

Schauen Sie sich die Methode Checktokenmemberchip. Es gibt eine Probe dort von IsUserAdmin () -Implementierung sowie einig anderen nützlichen Community-Feedback auf, wenn diese Funktion nicht zurück, was erwartet wird und was es zu verbessern zu tun.

Dies wird herausfinden, ohne Beschuss aus:

require 'win32/registry'

is_admin = false
begin
  Win32::Registry::HKEY_USERS.open('S-1-5-19') {|reg| }
  is_admin = true
rescue
end

Die Strategie ist ähnlich wie Peter, aber mit weniger Aufwand.

Hier ist die bessere (Powershell) Art und Weise tun: https://stackoverflow.com/a/16617861/863980

In einer Zeile können Sie sagen (copy / paste in posh und es wird funktionieren):

(@(([ADSI]"WinNT://./Administrators,group").psbase.Invoke("Members")) | `
foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}) -contains "Administrator"

=> liefert True wenn Benutzergruppe Administratoren gehört (im Gegensatz zu Benutzern Überprüfung IST Administrator)

(Anmerkung: Graviszeichen oder Gravis `entkommt den Wagenrücklauf in Power, in Ruby es die Shell-Befehle, wie C ++ 's-System (' Befehl ausführt ') ..)

So in Ruby kann man sagen, (Kopieren / Einfügen in irb):

def is_current_user_local_admin?
  return `powershell "(@(([ADSI]'WinNT://./Administrators,group').psbase.Invoke('Members')) | foreach {$_.GetType().InvokeMember('Name', 'GetProperty', $null, $_, $null)}) -contains 'Administrator'"`.include? "True"
end

Sie wissen nicht, die (noch besser) WMI Weise es aber tun. Damit könnte man so etwas getan hat (in Ruby wieder):

require 'win32ole'
wmi = WIN32OLE.connect('WinNT://./Administrators,group')
# don't know what should come here...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top