powershell进程如何从外部加载的DLL返回类型/对象

本文关键字:DLL 返回类型 对象 加载 进程 从外部 powershell | 更新日期: 2023-09-27 18:28:48

我是.NET和Powershell、的新手程序员

我有一个小的编译的.NET DLL,它利用目录服务和TSUserExLib来获取TerminalService属性。DLL有一个返回"IADsTSUserEx"的静态函数。我测试了DLL,它在返回字符串时可以工作,但是否可以将IADsTSUserEx类''对象类型返回到powershell?当我从powershell执行静态函数时,我不会得到任何回报,甚至不会得到null。我尝试使用以下命令

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;

powershell进程如何从外部加载的DLL返回类型/对象

由于您的方法返回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);