Вот лучший (PowerShell) способ сделать это: https://stackoverflow.com/a/16617861/863980
В одной строке вы можете сказать (скопируйте / вставьте в шикарный, и это будет работать):
(@(([ADSI]"WinNT://./Administrators,group").psbase.Invoke("Members")) | `
foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}) -contains "Administrator"
=> возвращает True
, когда пользователь входит в группу администраторов (в отличие от проверки пользователя IS Administrator)
(Примечание: обратный удар или серьезный акцент `избегает возврата каретки в PowerShell, в Ruby он выполняет команды оболочки, такие как система C ++ ('command') ..)
Итак, в Ruby вы можете сказать (скопировать / вставить в 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
Не знаю (даже лучше) WMI способ сделать это, хотя. С этим вы могли бы сделать что-то вроде (снова в Ruby):
require 'win32ole'
wmi = WIN32OLE.connect('WinNT://./Administrators,group')
# don't know what should come here...