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

Показать сообщение отдельно

Новый участник


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

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


Kazun, к сожалению командлеты тут не нужны, т.к. ничего конкретного с учётной записью проделывать не нужно.
Благодаря вашему примеру мне стало понятно как работать с консолью MMC, и вот что у меня получилось:

Код: Выделить весь код
Option Explicit

'##########################################################################################################
' Скрипт открывает окно свойств для пользователя. В домене test.local.
' Поиск производится по имени пользователя (логину)
' При запуске требует передачи параметра user: prop.vbs /user:<UserName> через коммандную строку,
' либо в самом скрипте при его запуске с пустым параметром /user
'##########################################################################################################

Dim colNamedArguments, strParamUser
Set colNamedArguments = WScript.Arguments.Named
If colNamedArguments.Count > 0 Then
  strParamUser = colNamedArguments.Item("user")
Else
  Dim mb
  mb = MsgBox("Usage: prop.vbs /user:UserName" & Chr(&HD&) & "Do you want enter the user login name manually?", vbInformation + vbYesNo, "Don't specify parameter ""user""")
  If mb = vbYes Then
    Dim strInput    
    strInput = InputBox("Enter login (domain: DC=test.local):")
    If Trim(strInput) <> "" Then
      strParamUser = strInput
    End If
  Else
    WScript.Quit   
  End If
End If

' находим объект УЗ по имени пользователя -- samAccountName
Function GetDistinguishedFromLDAP(samAccountName)
  Const C_SRCH_FIELD = "(samAccountName="
  Const C_OUT_FIELDS = "samAccountName,displayName,distinguishedName;"
  Const C_SRCH_METHOD = "subtree"

  Dim objConnection
  Set objConnection = CreateObject("ADODB.Connection")
  objConnection.Open "Provider=ADsDSOObject;"
   
  Dim objCommand
  Set objCommand = CreateObject("ADODB.Command")
  objCommand.ActiveConnection = objConnection
  
  objCommand.CommandText = _
    "<LDAP://DC=test,DC=local>;(&(objectCategory=person)" & _
         C_SRCH_FIELD & samAccountName & "));" & _
         C_OUT_FIELDS & _
         C_SRCH_METHOD
         
  Dim objRecordSet
  Set objRecordSet = objCommand.Execute
  
  If objRecordset.RecordCount > 0 Then
    objRecordSet.MoveFirst 
    GetDistinguishedFromLDAP = objRecordSet.Fields(2).Value
  End If
  
  objConnection.Close
End Function

' преобразуем ldap-путь в обычный путь
Function DistinguishedToPath(s)
	Dim distpath, path, pathDC, e
	
	distpath = Split(s, ",")
	For Each e In distpath
	 Select Case Left(e, 2)
	     Case "OU", "CN" path = Right(e, Len(e) - InStr(e, "=")) & "/" & Path
	     Case "DC" pathDC = pathDC & "." & Right(e, Len(e) - InStr(e, "="))
	 End Select	 
	Next
	
	If Right(path, 1) = "/" Then path = Left(path, Len(path) - 1)
	If Left(pathDC, 1) = "." Then pathDC = Right(pathDC, Len(pathDC) - 1)
	
	DistinguishedToPath = pathDC & "/" & path
End Function

' ###################### Открытие MMC и добавление объекта
Dim objMMC
Set objMMC = Wscript.CreateObject("MMC20.Application")
Dim objDoc
Set objDoc = objMMC.Document
objDoc.SnapIns.Add("{E355E538-1C2E-11D0-8C37-00C04FD8FE93}")

Dim oV
Set oV = objDoc.Views.Item(1)
oV.ActiveScopeNode = oV.ListItems.Item(1)

Dim aPath
aPath = Split(DistinguishedToPath(GetDistinguishedFromLDAP(strParamUser)), "/")

Dim p
' открывает нужные ветки в соответствии с путём объекта 
For Each p In aPath
  Dim i
  For i = 1 To oV.ListItems.Count
    If oV.ListItems.Item(i).Name = p Then
  	  'MsgBox oV.ListItems.Item(i).Name
  	 
  	  ' перемещаемся по дереву, в соответствии с местоположением найденного объекта (УЗ)
  	  If oV.ListItems.Item(i).IsScopeNode Then
  	    oV.ActiveScopeNode = oV.ListItems.Item(i)
  	  End If
  	  Exit For
  	End If
  Next
Next

Dim oActiveView, oUserNode
Set oActiveView = objDoc.ActiveView

For Each p In oActiveView.ListItems
  If p.Name = aPath(UBound(aPath)) Then
    Set oUserNode = p
    Exit For
  End If
Next

objDoc.ActiveView.Select(oUserNode)
objDoc.ActiveView.ExecuteSelectionMenuItem("_PROPERTIES")

Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Popup "Click Ok", 10, "Job done!", vbInformation
'MsgBox "Click Ok", vbInformation, "Job done!"
Скрипт ищет заданный логин и выводит окно свойств для этого пользователя. Но есть новая проблема, и поэтому я снова здесь
Проблема в том, что окно свойств появляется ЗА окном программы, которая его вызывает. А также, если после метода ExecuteSelectionMenuItem не показывать сообщение или не делать Wait секунды на 3-5, то окно свойств не появляется вообще.

Каким образом можно заставить появляться его на первом плане?

Последний раз редактировалось Aynyuh, 02-03-2012 в 19:05. Причина: пояснение


Отправлено: 19:02, 02-03-2012 | #7