gpt4 book ai didi

powershell - 如何将自定义 COM 枚举指定为 PowerShell 方法参数

转载 作者:行者123 更新时间:2023-12-04 02:24:23 26 4
gpt4 key购买 nike

如何为在 COM 对象中声明的枚举创建引用以传递给需要它的方法?具体来说,有一个方法SetHomeDir在将枚举作为唯一参数的第 3 方 COM 对象上。参数期望的定义基本上是:

typedef enum
{
abFalse = 0,
abTrue = 1,
abInherited = -2
} SFTPAdvBool;

它似乎是在 COM 对象中的某处定义的,但不是我可以使用 New-Object 创建的对象。我尝试了以下方法,它们都给出了相同的 MX Error: 7回复:
$obj.SetHomeDir($true)
$obj.SetHomeDir(1)
$obj.SetHomeDir([Object]1)
$obj.SetHomeDir([Int16]1)

Exception calling "SetHomeDir" with "1" argument(s): "MX Error: 7 (00000007)"

以下是尝试其他一些方法的结果:
PS C:\> New-Object -ComObject SFTPCOMINTERFACELib.SFTPAdvBool
New-Object : Cannot load COM type SFTPCOMINTERFACELib.SFTPAdvBool.

PS C:\> [SFTPAdvBool]::abTrue
Unable to find type [SFTPAdvBool]:
make sure that the assembly containing this type is loaded.

PS C:\> [SFTPCOMINTERFACELib.SFTPAdvBool]::abTrue
Unable to find type [SFTPCOMINTERFACELib.SFTPAdvBool]:
make sure that the assembly containing this type is loaded.

COM 向 PowerShell 公开的方法签名如下所示:
PS C:\> $user.SetHomeDir

MemberType : Method
OverloadDefinitions : {void SetHomeDir (SFTPAdvBool)}
TypeNameOfValue : System.Management.Automation.PSMethod
Value : void SetHomeDir (SFTPAdvBool)
Name : SetHomeDir
IsInstance : True

注意:这是在 Windows Server 2008 R2 上的 PowerShell 2.0 下运行的,但如果需要,我会考虑将 Windows 管理框架升级到更新版本。

更新:这是 Visual Studio 对象资源管理器的屏幕截图,以防提供任何线索。

COM Object in Visual Studio Object Explorer

最佳答案

我们最终在 COM 对象周围使用了一个已编译的 C# 互操作包装器。我能够指定一个 int作为参数,并仅使用 case 语句从枚举中传递正确的值。据我所知,没有办法直接从 Powershell 执行此操作,并且需要将 COM 对象包装在托管代码中。

我们已经与 Globalscape 建立了一个对话,希望这将是他们在 future 版本中解决的问题。

关于powershell - 如何将自定义 COM 枚举指定为 PowerShell 方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37737314/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com