Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBS/WSH/JS - [решено] Как проверить наличие прав администратора

Ответить
Настройки темы
VBS/WSH/JS - [решено] Как проверить наличие прав администратора

Пользователь


Сообщения: 59
Благодарности: 1

Профиль | Отправить PM | Цитировать


Как проверить наличие прав администратора в Windows без вывода окон для пользователя?

Отправлено: 19:17, 09-05-2012

 

Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Цитата:
net localgroup Администраторы
Команда выведет список локальных администраторов. Затем сравнить его с текущим пользователем. Вот и ответ. Или необходимо именно через VBS...?

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:30, 10-05-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
WScript.Echo WScript.CreateObject("CompatUI.Util.1").CheckAdminPrivileges()
Правда, не знаю, остался ли объект «CompatUI.Util.1» в новых ОС.

Во всяком случае, можно попробовать получить доступ к тем объектам, к которым он (доступ) разрешён только с административными привилегиями. И на основании результата делать вывод.
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:19, 10-05-2012 | #3


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


В семерке, похоже, уже нет:
Цитата:
---------------------------
Windows Script Host
---------------------------
Сценарий: C:\Users\firsov\Desktop\1.vbs
Строка: 1
Символ: 1
Ошибка: Не удается найти класс программируемых объектов с именем "CompatUI.Util.1".
Код: 80020009
Источник: WScript.CreateObject

---------------------------
ОК
---------------------------

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)

Это сообщение посчитали полезным следующие участники:

Отправлено: 03:43, 10-05-2012 | #4


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Delirium:
В семерке, похоже, уже нет: »
Спасибо, ясно.

А ежели так попробовать:
Код: Выделить весь код
Option Explicit

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemObjectEx


Set objSWbemLocator    = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(".", "root\cimv2")

With WScript.CreateObject("WScript.Network")
	Set objSWbemObjectEx = objSWbemServicesEx.Get( _
		"Win32_NetworkLoginProfile.Name='" & _
		.UserDomain & "\" & .UserName & "'")
End With

With objSWbemObjectEx
	Select Case .Privileges
		Case 0
			WScript.Echo .Name & " is Guest"
		Case 1
			WScript.Echo .Name & " is User"
		Case 2
			WScript.Echo .Name & " is Administrator"
		Case Else
			' Impossible
	End Select
End With

Set objSWbemServicesEx = Nothing
Set objSWbemLocator    = Nothing

WScript.Quit 0
Судя по этому:

Win32_NetworkLoginProfile class
NetUserGetInfo function
USER_INFO_4 structure

— что-то похожее. Delirium, Вам WinAPI ближе — посмотрите по ссылкам, гоже ли?! Ну, и — не знаю, как будет себя вести на машине без сети.
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:26, 10-05-2012 | #5


Старожил


Сообщения: 169
Благодарности: 27

Профиль | Сайт | Отправить PM | Цитировать


Я когда-то делал так

Set wshshl = CreateObject("Wscript.Shell")

Пробовал создать ключ в разделе реестра

wshshl.RegWrite (параметры)

здесь
HKEY_LOCAL_MACHINE\SOFTWARE\Наш_подраздел\ключ

проверял наличие ключа
wshshl.RegRead (параметры)

Если ключ не создан, то нет прав на запись к HKEY_LOCAL_MACHINE, соотвественно не Админ.

-------
Microsoft Visual C++ | Realtek Ethernet Drivers | .NET Framework 4.0

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:58, 10-05-2012 | #6


Пользователь


Сообщения: 59
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата:
Option Explicit

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemObjectEx


Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(".", "root\cimv2")

With WScript.CreateObject("WScript.Network")
Set objSWbemObjectEx = objSWbemServicesEx.Get( _
"Win32_NetworkLoginProfile.Name='" & _
.UserDomain & "\" & .UserName & "'")
End With

With objSWbemObjectEx
Select Case .Privileges
Case 0
WScript.Echo .Name & " is Guest"
Case 1
WScript.Echo .Name & " is User"
Case 2
WScript.Echo .Name & " is Administrator"
Case Else
' Impossible
End Select
End With

Set objSWbemServicesEx = Nothing
Set objSWbemLocator = Nothing

WScript.Quit 0
Работает на Windows XP/7. Сейчас попробую на Vista и 98

Отправлено: 20:05, 10-05-2012 | #7


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Dark_Timur, то, что работает — это-то было понятно. Вопрос в том, действительно ли сие есть именно то, что мы ожидаем. Потому мне хотелось бы, чтобы более опытные коллеги, работающие на уровень ниже, нежели скрипты, сопоставили приведённые мною выше ссылки и высказали своё мнение на этот счёт.

Отправлено: 21:27, 10-05-2012 | #8


Пользователь


Сообщения: 59
Благодарности: 1

Профиль | Отправить PM | Цитировать


Подвожу итоги:

читать дальше »
Цитата:
Option Explicit

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemObjectEx


Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(".", "root\cimv2")

With WScript.CreateObject("WScript.Network")
Set objSWbemObjectEx = objSWbemServicesEx.Get( _
"Win32_NetworkLoginProfile.Name='" & _
.UserDomain & "\" & .UserName & "'")
End With

With objSWbemObjectEx
Select Case .Privileges
Case 0
WScript.Echo .Name & " is Guest"
Case 1
WScript.Echo .Name & " is User"
Case 2
WScript.Echo .Name & " is Administrator"
Case Else
' Impossible
End Select
End With

Set objSWbemServicesEx = Nothing
Set objSWbemLocator = Nothing

WScript.Quit 0
Мне этот вариант понравился больше всех. Выбрал именно его.

Windows 2000/XP/Vista/7: Работает
Windows 98: Не работает

Цитата:
Строка: 8
Столбец: 0
Категория: WScript.CreateObject
Описание Не удается найти класс объекта "WbemScripting.SWbemLocator".

Цитата:
WScript.Echo WScript.CreateObject("CompatUI.Util.1").CheckAdminPrivileges()
Windows XP: Работает
Windows 98/7: Не работает


Цитата:
---------------------------
Windows Script Host
---------------------------
Сценарий: C:\Users\firsov\Desktop\1.vbs
Строка: 1
Символ: 1
Ошибка: Не удается найти класс программируемых объектов с именем "CompatUI.Util.1".
Код: 80020009
Источник: WScript.CreateObject

---------------------------
ОК
---------------------------

Цитата:
net localgroup Администраторы
В vbs это будет так:

Цитата:
WshShell.Run "net localgroup Администраторы"
Windows XP: Работает
Windows 98: Не работает. Пишет, что не умеет так делать.

Цитата:
Set wshshl = CreateObject("Wscript.Shell")

Пробовал создать ключ в разделе реестра

wshshl.RegWrite (параметры)

здесь
HKEY_LOCAL_MACHINE\SOFTWARE\Наш_подраздел\ключ

проверял наличие ключа
wshshl.RegRead (параметры)

Если ключ не создан, то нет прав на запись к HKEY_LOCAL_MACHINE, соотвественно не Админ.
Очень интересная идея. Спасибо. Не знаю, почему сам до этого не догадался.

Windows XP: Работает
Windows 98: Выдаёт ошибки.


Спасибо большое! Оказалось, что всё гениальное - просто. Тему закрываю, так как она исчерпала себя. Ещё раз большое спасибо!

Отправлено: 23:08, 10-05-2012 | #9


Пользователь


Сообщения: 69
Благодарности: 11

Профиль | Отправить PM | Цитировать


Ну, создавать ветку рееста или создавать локальную учетку (как предлагают на других форумах), на мой взгляд, совершенно, "не кошерно". Надо, всего лишь, перебрать почленно группу "Администраторы" на локальном компе и сравнить её членов с залогиненным пользователем. К сожалению, я не программер, поэтому прошу не судить строго, если код не столь оптимален и не универсален, но, проанализировав материаллы по этим двум ссылкам:
List local administrators across a network domain,
List User properties as displayed in ADUC,
у меня получилось следующее:
Код: Выделить весь код
Option Explicit
Dim strComp, objSysInfo, objLocalGroup, objUser, item
On Error Resume Next
strComp = "."
Set objLocalGroup = GetObject("WinNT://" & strComp & "/Администраторы")
Set objSysInfo = CreateObject("ADSystemInfo")
Set objUser = GetObject("LDAP://" & objSysInfo.UserName)
For Each item in objLocalGroup.Members
	if item.Name = objUser.sAMAccountName Then Wscript.Echo "User " _
 	& objUser.sAMAccountName & " have administrator rights!"
Next
WScript.Quit()

Отправлено: 10:32, 17-12-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBS/WSH/JS - [решено] Как проверить наличие прав администратора

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Как проверить в определённой директории наличие файлов (не подкаталогов!) ? SANIOK_AV Скриптовые языки администрирования Windows 26 21-06-2011 12:25
Debian/Ubuntu - Как принудительно проверить корневую систему на наличие ошибок? Grey_rnd Общий по Linux 7 07-04-2011 06:48
CMD/BAT - Как проверить наличие текста в файле mamont1 Скриптовые языки администрирования Windows 6 16-09-2010 16:32
Как проверить наличие процесса? Не флужу AutoIt 0 13-01-2010 07:31
Как проверить JavaScript'ом наличие Flash??? Krendebobel Вебмастеру 10 28-06-2005 16:17




 
Переход