2011/08/05

Custom context commands in AD Users and Computers

Можно добавить свои комманды в меню по правой кнопке мышки для консольки AD Users and Computers. В примере покажу Ping для Компьютеров и Unlock для Пользователей.


  1. Открываем adsiedit.msc и переходим в раздел:
    CN=user-Display,CN=409,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=ru
    Здесь 409 - для английского языка системы, 419 - для русского. Часть domain.ru - конечно тоже у всех своя)
  2. Дважды кликаем на user-Display а затем на adminContextMenu
  3. Добавляем
    4,Unlock,c:\Windows\SYSVOL\sysvol\domain.ru\scripts\unlockUser.vbs
    здесь поля разделенные запятыми:
    1- номер сверху, под которым пункт будет отображаться в меню
    2- название пункта, можно использовать & для указания hotkey
    3- путь к скрипту, можно указывать и UNC
  4. Открываем такой же атрибут для параметра:
    CN=computer-Display,CN=409,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=ru
    и добавляем:
    5,Ping,c:\Windows\SYSVOL\sysvol\domain.ru\scripts\ping.cmd
  5. Теперь дело за самими скриптами. Здесь для примера используется обработка параметров вызова для vbs и cmd. Путь по которому лежат скрипты реплицируется на все контроллеры домена, а вот если вы будете открывать консоль ADUC с локального компа, например через RSAT, то скрипты обнаружены не будут. Если вам необходимо такое использование, то можно положить скрипты в шару, или в
    \\domain.ru\sysvol\domain.ru\scripts\
    Но тогда при каждом запуске вы будете получать сообщение

    Которое я не смог побороть (
  6. Сохраняем скрипт unlockUser.vbs:
    Const E_ADS_PROPERTY_NOT_FOUND = -2147463155
    
    Set wshArguments = WScript.Arguments
    Set objUser = GetObject(wshArguments(0))
    
    If IsLockedOut(objUser) Then
    objUser.Put "lockouttime","0"
    objUser.SetInfo
    MsgBox "The user has been unlocked - " & objUser.sAMAccountName
    Else
    MsgBox "The user account is not locked - " & objUser.sAMAccountName
    End If
    
    Function IsLockedOut(objUser)
    on Error resume next
    Set objLockout = objUser.get("lockouttime")
    
    if Err.Number = E_ADS_PROPERTY_NOT_FOUND then
    IsLockedOut = False
    Exit Function
    End If
    On Error GoTo 0
    
    if objLockout.lowpart = 0 And objLockout.highpart = 0 Then
    IsLockedOut = False
    Else
    IsLockedOut = True
    End If
    End Function
  7. Сохраняем скрипт ping.cmd:
    ping %2 -t
    (будет идти бесконечный пинг, закрытие окна по Ctrl-C)
  8. Открываем консоль ADUC и проверяем :)

1 comment:

  1. >>Которое я не смог побороть

    Это известная фича. Добавьте \\domain.ru в зону интрасети в IE и будет вам счастье.

    ReplyDelete