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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » WMI - [решено] Win32_Account и Win32_SID помогите разобраться

Ответить
Настройки темы
WMI - [решено] Win32_Account и Win32_SID помогите разобраться

Старожил


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

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


Изменения
Автор: foxbat
Дата: 23-05-2012
Цитата:
On Error Resume Next
const HKEY_USERS = &H80000003
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
If Err.Number <> 0 Then
WScript.Echo Err.Number & ": " & Err.Description
WScript.Quit
End If
intRes = objReg.EnumKey(HKEY_USERS, "", sNames)
If intRes <> 0 Then
WScript.Echo intRes & ": не удалась прочитать подразделы ""HKEY_USERS\" & strKey & """"
WScript.Quit
End If
If IsArray(sNames) Then
For Each strSubKey In sNames
ReadKey strKey & "\" & strSubKey
'wscript.echo(strSubKey)
If strSubKey="S-1-5-21-3542024261-4289602802-4269527428-1311" Then
WScript.Echo "catch"

Else strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
'Set objAccount = objWMIService.Get("Win32_SID.SID='"&strsubkey&"'")
Set objAccount = objWMIService.Get("Win32_Account.SID='"&strsubkey&"'")
Wscript.Echo objAccount.SID

End If
Next
End If
споткнулся на этом

Цитата:
'Set objAccount = objWMIService.Get("Win32_SID.SID='"&strsubkey&"'")
Set objAccount = objWMIService.Get("Win32_Account.SID='"&strsubkey&"'")
Wscript.Echo objAccount.SID
почему в первом случае, который закоментирован, SID объекта выводит, а во втором нет, у того и у другого класса есть свойство SID.

мне нужно выявить имя пользователя ( отображаемое имя) зная его SID, типа Иванов Иван. если я правильно понял такое свойство есть у Win32_Account - Name.

Цель скрипта откорректировать данные в реестре. а именно у всех пользователей
HKEY_USERS\SID\Software\Microsoft\Office\Common\UserInfo отредактировать ключ UserName - поставить актуальный. сейчас у всех пользователей одно и тоже имя - не правильное

Отправлено: 16:16, 23-05-2012

 

Ветеран


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

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


Цитата foxbat:
почему в первом случае, который закоментирован, SID объекта выводит, а во втором нет, у того и у другого класса есть свойство SID. »
foxbat, потому что…
читать дальше »
…Вы можете получить конкретный экземпляр объекта, только указав его полный путь. Для этого нужно знать свойства, являющие квалификаторами класса, и их значения, однозначно определяющие конкретный экземпляр объекта среди прочих.

Для класса «Win32_SID» квалификатором является именно свойство «.SID». Потому Вы можете получить экземпляр объекта, указав свойство «.SID»:
Код: Выделить весь код
Option Explicit

Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemObjectEx


strComputer = "."

Set objSWbemLocator    = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set objSWbemObjectEx   = objSWbemServicesEx.Get("Win32_SID='S-1-5-21-1004336348-1979792683-839522115-500'")

With objSWbemObjectEx
	WScript.Echo .AccountName, .ReferencedDomainName, .SID
End With

Set objSWbemObjectEx   = Nothing
Set objSWbemServicesEx = Nothing
Set objSWbemLocator    = Nothing

WScript.Quit 0
Цитата:
Код: Выделить весь код
Администратор S-1-5-21-1004336348-1979792683-839522115-500
Для класса же «Win32_Account» квалификаторами является пара свойств: «.Domain» и «.Name». Соответственно, чтобы получить конкретный экземпляр класса «Win32_Account», Вы обязаны указать оба этих свойства в методе «.Get», например:
Код: Выделить весь код
Option Explicit

Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemObjectEx


strComputer = "."

Set objSWbemLocator    = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set objSWbemObjectEx   = objSWbemServicesEx.Get("Win32_UserAccount.Domain='MachineName',Name='Администратор'")

With objSWbemObjectEx
	WScript.Echo .Name, .Domain, .SID
End With

Set objSWbemObjectEx   = Nothing
Set objSWbemServicesEx = Nothing
Set objSWbemLocator    = Nothing

WScript.Quit 0
Вы же пытаетесь получить экземпляр, не указывая квалификаторов объекта. Сие не верно.

Цитата foxbat:
мне нужно выявить имя пользователя ( отображаемое имя) зная его SID, »
Вы можете использовать первый пример.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:13, 23-05-2012 | #2



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

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


Старожил


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

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


Iska, спасибо за разъяснение.

Отправлено: 17:34, 23-05-2012 | #3


Старожил


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

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


Цитата Iska:
Вы можете использовать первый пример. »
из него можно взять имя пользователя, ivanov_i , а мне нужно отображаемое имя вида Иванов Иван. Его можно откуда-нибудь взять ?

Отправлено: 11:20, 24-05-2012 | #4


Ветеран


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

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


Цитата foxbat:
из него можно взять имя пользователя, ivanov_i , а мне нужно отображаемое имя вида Иванов Иван. Его можно откуда-нибудь взять ? »
Ясно. Тогда только перечислять объекты класса «Win32_UserAccount», фильтруя по известному SID'у:
Код: Выделить весь код
Option Explicit

Dim strComputer
Dim strSID

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim collSWbemObjectSet
Dim objSWbemObjectEx


strComputer = "."
strSID      = "S-1-5-21-117609710-1715567821-725345543-500"

Set objSWbemLocator    = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set collSWbemObjectSet = objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_UserAccount WHERE SID = '" & strSID & "'")

For Each objSWbemObjectEx In collSWbemObjectSet
	With objSWbemObjectEx
		WScript.Echo .Name, .Domain, .FullName, .SID
	End With
Next

Set objSWbemObjectEx   = Nothing
Set collSWbemObjectSet = Nothing
Set objSWbemServicesEx = Nothing
Set objSWbemLocator    = Nothing

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

Отправлено: 12:06, 24-05-2012 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » WMI - [решено] Win32_Account и Win32_SID помогите разобраться

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Помогите разобраться skop-manturovo Тест-форум 2 20-04-2012 09:33
D-Link - dir-300+dsl-200 помогите разобраться lisenok2034 Сетевое оборудование 4 07-01-2010 17:38
Router - Помогите разобраться! trail Сетевое оборудование 15 22-07-2008 01:57
Помогите разобраться с HDD Irzhi_del_Ljllespid Непонятные проблемы с Железом 23 07-11-2007 12:22
Помогите разобраться.... alex e О сайте и форуме 2 03-04-2002 09:17




 
Переход