Как процесс PowerShell возвращает типы / объекты из загруженной извне DLL? - PullRequest
0 голосов
/ 23 марта 2012

Я начинающий программист в .NET и Powershell,

У меня есть небольшая скомпилированная библиотека .NET, которая использует службы каталогов и TSUserExLib для получения атрибутов TerminalService.В DLL есть одна статическая функция, которая возвращает «IADsTSUserEx».Я протестировал DLL, и она работает при возврате строки, но возможно ли вернуть класс \ объектный тип IADsTSUserEx в powershell?Когда я выполняю статическую функцию из powershell, я ничего не получаю, даже ноль.Я попробовал это, используя следующие команды

Add-Type -Path "c:\temp\test.dll"
[ABC.Class1]::getTSEntry("user@domain.com")

DLL содержит этот фрагмент кода:

DirectoryEntry user = result.GetDirectoryEntry();
                IADsTSUserEx tsuser = (IADsTSUserEx)result.GetDirectoryEntry().NativeObject;
                return tsuser;

1 Ответ

0 голосов
/ 23 марта 2012

Поскольку ваш метод возвращает COM-объект, а PowerShell не предоставляет вам напрямую его методы и свойства, вам необходимо получить к ним доступ с отражением, а Type.InvokeMember метод :

$entry = [ABC.Class1]::getTSEntry("user@domain.com");
$entryType = $entry.GetType();
$binder = $null;
$someMethodParameters = @('Parameter #1', 12345, 'Parameter #3');
$someMethodResult = $entryType.InvokeMember('SomeMethod', 'Public, Instance, InvokeMethod', $binder, $entry, $someMethodParameters);
$somePropertyValue = $entryType.InvokeMember('SomeProperty', 'Public, Instance, GetProperty', $binder, $entry, $null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...