У меня есть вопрос о том, как 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
.
Я знаю, что это не проблема кодирования, и я надеюсь, что я не получу немедленного голосования, но мой вопрос: почему я не могу общаться с этой сборкой способом VBScript при использовании Powershell? Чем New-Object -ComObject
в Powershell отличается от CreateObject(identifier)
в VBScript?