Как получить значения свойств терминальных служб в Active Directory из атрибута userParameters

Я использую dirsync для получения значений атрибутов, которые изменились в Active Directory (журнал изменений). Следующая ссылка объясняет, как dirsync используется для получения значений атрибутов:

'http://blogs.technet.com/b/isrpfeplat/archive/2010/09/20/using-the-dirsync-control.aspx'

Я меняю атрибут «Локальный путь» в профиле служб удаленных рабочих столов пользователя. Я запустил клиент, который использует dirsync для получения измененных объектов в AD. В клиенте изменяется атрибут userParameters, а значение находится в зашифрованном виде.

CtxCfgPresent                                   P☺CtxCfgPresent???? ☻☺CtxWFProfi
lePath?↑→☺CtxWFHomeDir?????????????"☻☺CtxWFHomeDirDrive?☺CtxShadow????☺CtxMaxDis
connectionTime????☺CtxMaxConnectionTime????☺CtxMaxIdleTime???? ☻☺CtxWorkDirector
y?☺CtxCfgFlags1????"☻☺CtxInitialProgram?

Есть ли способ получить фактическое значение из userParameters.


person cmm user    schedule 07.01.2015    source источник


Ответы (1)


Способ 1. Анализируйте себя :)

Структура информации описана в спецификации [MS-TSTS]:

http://msdn.microsoft.com/en-us/library/ff635189.aspx

Способ 2: интерфейс IADsTSUserEx

Например, в С#:

DirectoryEntry userEntry = new DirectoryEntry("LDAP://domain.com/CN=user1,CN=Users,DC=domain,DC=com", "user", "pwd")
IADsTSUserEx tsUser = userEntry.NativeObject as IADsTSUserEx;

Определение IADsTSUserEx выглядит примерно так:
(мне нужно только прочитать информацию в моем проекте, поэтому есть только геттер, но не сеттер)

[
ComImport,
InterfaceType(ComInterfaceType.InterfaceIsIDispatch),
Guid("C4930E79-2989-4462-8A60-2FCF2F2955EF")
]
private interface IADsTSUserEx
{
    string TerminalServicesProfilePath { get;}
    string TerminalServicesHomeDirectory { get;}
    string TerminalServicesHomeDrive { get;}
    bool AllowLogon { get;}
    long EnableRemoteControl { get;}
    long MaxDisconnectionTime { get;}
    long MaxConnectionTime { get;}
    long MaxIdleTime { get;}
    int ReconnectionAction { get;}
    int BrokenConnectionAction { get;}
    bool ConnectClientDrivesAtLogon { get;}
    bool ConnectClientPrintersAtLogon { get;}
    bool DefaultToMainPrinter { get;}
    string TerminalServicesWorkDirectory { get;}
    string TerminalServicesInitialProgram { get;}
}

Вы также можете использовать другой язык сценариев, который будет проще, чем C#.

vbscript:

http://www.wisesoft.co.uk/scripts/vbscript_read-write_terminal_services_settings.aspx

PowerShell:

http://blogs.technet.com/b/heyscriptingguy/archive/2008/10/23/how-can-i-edit-terminal-server-profiles-for-users-in-active-directory.aspx

person baldpate    schedule 07.01.2015