从Powershell

时间:2017-05-02 13:06:12

标签: python powershell com

我是处理COM库的新手等等,我已经解决了一个我不知道如何解决的问题。

我在Python中使用了一个代码库,我希望将其转换为Powershell。

所以我有一个我想要使用的COM库。我已经使用python win32com.client.Dispatch()库成功调用它。有些程序只需要在没有参数的情况下调用,它们在python和PowerShell中都非常直接。但是,如果该过程需要一些参数(变量),我无法在Powershell中使其工作。

例如:

我想调用一些需要参数的过程,我想要使用的过程就是Compute_CurrentPlan(),它有两个强制参数:

  • nmsg(long),返回消息的数量
  • msg()(字符串),从过程
  • 返回的消息数组

根据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

完全不成功。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

首先,您需要找出$ obj对象公开的方法 尝试 {码} $ obj | gm -MemberType方法 {码} 这应该给你一个方法列表和预期的参数类型等。