【问题标题】:Loading a Type Library via PowerShell and scripting Windows Live Writer通过 PowerShell 加载类型库并编写 Windows Live Writer 脚本
【发布时间】:2011-01-16 16:13:42
【问题描述】:

总的来说,我对 COM 和 Windows 编程/脚本非常陌生。我试图做的是编写 Windows Live Writer 脚本;根据文档,我才能打电话

  $o = New-Object -c WindowsLiveWriter.Application

我需要先加载TLB,所以我应该调用add-type命令,不幸的是它失败了:

PS C:\Users\NoWhereMan> add-type windowslivewriter.application
Add-Type : c:\Users\NoWhereMan\AppData\Local\Temp\a7ifbimo.0.cs(1) : A namespace does not directly contain members such
 as fields or methods
c:\Users\NoWhereMan\AppData\Local\Temp\a7ifbimo.0.cs(1) : >>> windowslivewriter.application
At line:1 char:9
+ add-type <<<<  windowslivewriter.application
    + CategoryInfo          : InvalidData: (c:\Users\NoWher...elds or methods:CompilerError) [Add-Type], Exception
    + FullyQualifiedErrorId : SOURCE_CODE_ERROR,Microsoft.PowerShell.Commands.AddTypeCommand

Add-Type : Cannot add type. There were compilation errors.
At line:1 char:9
+ add-type <<<<  windowslivewriter.application
    + CategoryInfo          : InvalidData: (:) [Add-Type], InvalidOperationException
    + FullyQualifiedErrorId : COMPILER_ERRORS,Microsoft.PowerShell.Commands.AddTypeCommand

不管怎样,我运行的是 Windows7 x64

编辑:x64 是关键问题,我需要将 PSH 作为 x86 进程运行

谢谢

【问题讨论】:

  • 您不需要对 COM 对象使用 add-type,它应该从对象 IDispatch 接口推断成员。 AFAIK add-type 仅用于添加新的 .NET 程序集。
  • 正如我对 Richard 评论的那样,我被从 new-object 得到的错误误导了,该错误实际上是因为我使用的是 64 位 PSH 进程而引发的。谢谢!

标签: windows com powershell windows-live-writer


【解决方案1】:

来自help add-type

将 Microsoft .NET Framework 类型(类)添加到 Windows PowerShell 会话。

windowslivewriter.application 不是 .NET 类型。

PowerShell (PSH) 直接支持 COM 对象,您不需要采取任何特殊步骤来加载类型库 (TLB)1,只需直接调用 documentation 中给出的方法即可为组件。例如:

$lw = New-Object -com WindowsLiveWriter.Application   
$lw.NetPost()

启动新的帖子编辑器。

总结:你确实不需要需要先加载TLB。

在 64 位 Windows 下,您可能需要确保您正在运行 PSH 的 32 位实例(“x86”)来执行此操作(取决于 Live Writer 组件是在进程中运行还是在进程外运行)。


1 严格来说,这只适用于支持使用 IDispatch 编写脚本的 COM 类型,但实际上很少有不支持的。

【讨论】:

  • 我被 New-Object -c 收到的错误信息误导了;但实际上它被抛出是因为我运行的是 PSH 的 x64 实例而不是 x86,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 2018-10-30
相关资源
最近更新 更多