我有一个关于Windows PowerShell在处理Com互操作时的工作方式的问题。
我有一个第三方应用程序(让我们称其为ThirdPartyApp
),它公开了一个可以调用的API。
我可以在例如Excel或Visual Studio中进行早期绑定,直接与其交互。 我可以在VBScript中进行晚期绑定,并仍然可以“直接”与其交互。
所谓“直接”,是指使用类似于ThirdPartyApp.Name
的语法调用API公开的属性和方法的方式。
因此,在VBScript中,我可以执行以下操作:
Dim api : Set api = CreateObject("ThirdPartyApp.API")
WScript.Echo api.Name
在PowerShell中,当我执行以下操作:
$api = New-Object -ComObject ThirdPartyApp.API
我必须使用这个语法来获取名称:
[System.__ComObject].InvokeMember('Name',[System.Reflection.BindingFlags]::GetProperty,$null,$api,$null)
现在,我明白这与 ThirdPartyApp
的构建方式有关。
我知道这不是一个编码问题,希望不会被立即踩,但我的问题是:为什么当使用 Powershell 时我不能以 VBScript 的方式访问该程序集?在 Powershell 中 New-Object -ComObject
和 VBScript 中的 CreateObject(identifier)
有何区别?