quitar puedo permisos obtener ejecutar como administrador windows ruby command-line privileges

permisos - no puedo ejecutar como administrador windows 8



Detecta si se está ejecutando con privilegios de administrador en Windows XP (6)

Opción Piskvor está bien, o consulte esta url http://weseetips.com/2008/04/16/how-to-check-whether-current-user-have-administrator-privilege/

este es el código en esa página

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;

Estoy tratando de averiguar cómo detectar si un usuario se está ejecutando con derechos de administrador en Windows XP. Esto es bastante fácil de hacer en Vista / Win7 gracias al comando whoami . Aquí hay un fragmento en Ruby sobre cómo hacerlo en Vista:

Tenga en cuenta que el siguiente enlace ahora incorpora la solución sugerida por muteW

http://gist.github.com/65931

El problema es que whoami no viene con Windows XP y, por lo tanto, el método vinculado anteriormente siempre devolverá false en WinXP, incluso si estamos ejecutando como administrador.

Entonces, ¿alguien sabe de una manera de detectar si estamos ejecutando como administrador en Windows XP usando Ruby, herramientas de línea de comandos, archivos por lotes o incluso herramientas de terceros (debe ser de código abierto, realmente)?


Si tu corres

>net localgroup administrators

en un shell de comandos debe obtener la lista de cuentas de administrador en Windows XP. Simplemente analice y escanee el resultado para verificar la cuenta de usuario particular que desea. Por ejemplo, para verificar si el usuario actual es un administrador que podría hacer,

>net localgroup administrators | find "%USERNAME%"


Consulte el método CheckTokenMembership . Hay un ejemplo de la implementación de IsUserAdmin () más algunos otros comentarios útiles de la comunidad sobre cuándo esa función no devuelve lo que se espera y qué hacer para mejorarla.


Esto detectará si el usuario se está ejecutando en modo elevado (por ejemplo, un símbolo del sistema que fue Administrador "Ejecutar como"). Se basa en el hecho de que necesita privilegios de administrador para leer la clave de registro de la cuenta LOCAL SERVICE:

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

esto devolverá un código de error distinto de cero si no se puede leer, y cero si puede.
Funciona desde XP hasta ...


Esto lo descubrirá sin desembolsar:

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

La estrategia es similar a la de Peter, pero con menos gastos generales.


Aquí está la mejor forma (PowerShell) de hacerlo: https://.com/a/16617861/863980

En una línea, puedes decir (copiar / pegar en posh y funcionará):

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

=> devuelve True cuando el usuario pertenece al grupo Administradores (en lugar de verificar el usuario IS Administrator)

(Nota: backtick o acento grave `escapa del retorno de carro en PowerShell, en Ruby ejecuta los comandos de shell, como el sistema de C ++ (''comando'') ..)

Entonces en Ruby, puedes decir (copiar / pegar en 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

No conozco la (incluso mejor) forma de hacerlo de WMI. Con eso, podrías haber hecho algo como (en Ruby nuevamente):

require ''win32ole'' wmi = WIN32OLE.connect(''WinNT://./Administrators,group'') # don''t know what should come here...