我需要将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对象引用?
答案 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类型库并完成转换 自动。
以下是有关此互操作工具的更多信息:
答案 1 :(得分:1)
您可以使用dynamic
直接镜像PowerShell的功能,并通过ProgId创建实例。例如,请参阅https://stackoverflow.com/a/3251325/8446。