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

时间:2012-03-22 21:52:06

标签: c# powershell com com-object

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

我有一个小的编译.NET DLL,它利用目录服务和TSUserExLib来获取TerminalService属性。 DLL有一个静态函数,返回“IADsTSUserEx”。我测试了DLL,它在返回字符串时有效,但是可以将IADsTSUserEx类\ object类型返回到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;

1 个答案:

答案 0 :(得分:0)

由于您的方法返回一个COM对象,并且PowerShell没有直接向您公开其方法和属性,因此您需要使用反射和Type.InvokeMember method来访问它们:

$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);