在C#中访问Powershell COM对象?

时间:2013-01-30 09:16:43

标签: c# powershell com-interop comobject

我需要将Powershell脚本转换为C#。

Powershell脚本访问Windows部署服务COM对象:

$wdsObject = New-Object -ComObject WdsMgmt.WdsManager
$wdsServer = $wdsObject.getWdsServer("Localhost")
[...]

是否可以在C#中访问这些COM对象?

我在Visual C#中找不到相应的COM对象引用。 我尝试将System32中的wdsmgmt.dll添加为C#项目中的引用,但这不起作用。否则,我很难过。

编辑:

回答评论1: Best way to access COM objects from C#

有问题的COM对象未列在参考文献中。我已经查看了大约5次列表,以确保我不会错过它。 是否有办法使COM对象显示在C#的COM引用列表中?

回答评论2(什么不起作用): 尝试添加wdsmgmt.dll会显示以下错误:

Please make sure the file is accessible, and that it is a valid assembly or COM component.

该文件是可访问的,但它似乎不是C#眼中的有效COM组件。

在注册表中搜索WdsMgmt显示COM对象至少以某种方式存在:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CD583E47-B079-4025-A799-5F951D016D3E}

也许重新提出的问题是:

当我在Powershell中知道它的名字时,如何向C#添加COM对象引用?

2 个答案:

答案 0 :(得分:1)

您是否尝试过使用TlbImp

  

创建COM类包装器

     

对于引用COM对象和接口的C#代码,您需要   包含C#中COM接口的.NET Framework定义   建立。最简单的方法是使用TlbImp.exe(类型库)   Importer),.NET Framework SDK中包含的命令行工具。   TlbImp将COM类型库转换为.NET Framework元数据 -   有效地创建一个可以从任何人调用的托管包装器   托管语言。使用TlbImp创建的.NET Framework元数据可以是   通过/ R编译器选项包含在C#构建中。如果你正在使用   在Visual Studio开发环境中,您只需要添加一个   引用COM类型库并完成转换   自动。

以下是有关此互操作工具的更多信息:

Tlbimp.exe (Type Library Importer)

答案 1 :(得分:1)

您可以使用dynamic直接镜像PowerShell的功能,并通过ProgId创建实例。例如,请参阅https://stackoverflow.com/a/3251325/8446