我有一个COM对象,我想创建一个方法并从Powershell调用。
我从源代码知道我知道方法签名是:
private DataSet MethodName(string connectionString, int userID, string location, int specID)
当我在Powershell中创建对象时:
$obj = New-Object -ComObject My.ComObjectClass
$obj | Get-Member
签名如下:
MethodName Method _Recordset_Deprecated MethodName (SAFEARRAY(Variant))
所以我创建了一个数组并将其传递给方法:
$MyArgs = "data source=Server;Initial catalog=kickassDB",1234,"flavortown",56
$obj.MethodName([ref]$MyArgs)
但这不起作用。我收到一个错误:
Exception calling "MethodName" with "1" argument(s): "Type mismatch"
我认为我的问题是我的数组充满了常规字符串和整数值,我需要创建VARIANT,但我不知道如何在Powershell中执行此操作。
有什么想法吗?
答案 0 :(得分:0)
我知道这是一篇非常老的文章,但是由于我遇到了类似情况并找到了该线程,所以只对其进行了更新。如果有人偶然发现此问题,他们可能会发现我的解决方案很有帮助。
尝试在PowerShell v7下使用HTMLFile COM对象的write方法时收到以下错误。这不是PowerShell v5的问题。在PS5中,该方法期望使用System.Object []参数。对于PS7,它期望使用SAFEARRAY(Variant)参数。
“类型不匹配。(0x80020005(DISP_E_TYPEMISMATCH))”
我能够使用jedigo的解决方案here解决问题,并提供字节数组而不是字符串。因此,最终起作用的代码类似于:
$H = New-Object -ComObject "HTMLFile"
$S = '<p>Some Text</p>'
$B = [System.Text.Encoding]::Unicode.GetBytes($S)
$H.write($B)