3

一般来说,我对 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 进程运行

谢谢

4

1 回答 1

3

来自help add-type

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

windowslivewriter.application不是 .NET 类型。

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

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

启动新的帖子编辑器。

总结:不需要先加载TLB。

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


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

于 2010-02-14T11:09:37.563 回答