这里是做的更好(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管理员相反)
(注意:反向或重音重音在PowerShell中转义回车,在Ruby中执行shell命令,如C++的系统('命令“)..)
所以在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...
这只验证用户名是否在Admin组中 - 它不检测当前会话是否具有管理权限。例如,在使用UAC的Win 7上,默认情况下,命令提示符以非管理员身份运行,并且上述命令将错误地将会话报告为Admin。请参阅我的解决方案,以获得更可靠的东西 – 2011-07-14 10:25:00