我有一个关于 Windows PowerShell 在处理 Com Interop 时如何工作的问题。
我有一个第三方应用程序(我们称之为ThirdPartyApp
)公开了一个我可以调用的 API。
我可以提前绑定它,例如Excel 或 Visual Studio 并“直接”与其对话。我可以在 VBScript 中后期绑定它,并且仍然“直接”与它对话。
我所说的“直接”是指我可以使用以下语法调用 API 公开的属性和方法:ThirdPartyApp.Name
所以在 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 方式与该程序集对话?如何New-Object -ComObject
在 Powershell 中不同于CreateObject(identifier)
在 VBScript 中?