我对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进程运行
由于
答案 0 :(得分:3)
来自help add-type
:
将Microsoft .NET Framework类型(类)添加到Windows PowerShell会话。
但windowslivewriter.application
不是.NET类型。
PowerShell(PSH)直接支持COM对象,您不需要采取任何特殊步骤来加载类型库(TLB) 1 ,只需按{{3}中的说明直接调用方法对于组件。 E.g:
$lw = New-Object -com WindowsLiveWriter.Application
$lw.NetPost()
启动新的帖子编辑。
总结:你不需要先加载TLB。
在64位Windows下,您可能需要确保运行PSB的32位实例(“x86”)才能执行此操作(具体取决于Live Writer组件是在进程内还是在进程外运行)。
1 严格来说,这仅适用于支持使用IDispatch进行脚本编写的COM类型,但实际上很少有这类不支持。