我是处理COM库的新手等等,我已经解决了一个我不知道如何解决的问题。
我在Python中使用了一个代码库,我希望将其转换为Powershell。
所以我有一个我想要使用的COM库。我已经使用python win32com.client.Dispatch()库成功调用它。有些程序只需要在没有参数的情况下调用,它们在python和PowerShell中都非常直接。但是,如果该过程需要一些参数(变量),我无法在Powershell中使其工作。
例如:
我想调用一些需要参数的过程,我想要使用的过程就是Compute_CurrentPlan(),它有两个强制参数:
根据get成员,输入参数为Compute_CurrentPlan Method bool Compute_CurrentPlan (int, SAFEARRAY(string), bool)
我使用RC.Compute_CurrentPlan(nmsg=pythoncom.Missing, Msg=pythoncom.Missing)
在Python中克服了这个问题,但我还没有找到一种方法来解决Powershell中的这个问题。
到目前为止,我已尝试过这三个命令。
PS C:\> $obj.Compute_CurrentPlan()
Cannot find an overload for "Compute_CurrentPlan" and the argument count: "0".
At line:1 char:1
+ $obj.Compute_CurrentPlan()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest
我也尝试过:
PS C:\> $obj.Compute_CurrentPlan([System.Int32]$nmsg, [System.String]$msg)
Argument: '1' should be a System.Management.Automation.PSReference. Use [ref].
At line:1 char:1
+ $obj.Compute_CurrentPlan([System.Int32]$nmsg, [System.String]$msg)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : NonRefArgumentToRefParameterMsg
这一个:
PS C:\> $obj.Compute_CurrentPlan([ref]$nmsg,[ref]$msg)
Exception calling "Compute_CurrentPlan" with "2" argument(s): "Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))"
At line:1 char:1
+ $obj.Compute_CurrentPlan([ref]$nmsg,[ref]$msg)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation
完全不成功。有什么建议吗?
答案 0 :(得分:0)
首先,您需要找出$ obj对象公开的方法 尝试 {码} $ obj | gm -MemberType方法 {码} 这应该给你一个方法列表和预期的参数类型等。