2010-02-14 198 views
2

我對COM和Windows編程/腳本一般都很陌生。我想要做的是編寫Windows Live Writer的腳本;根據文檔之前,我可以打電話通過PowerShell和腳本編寫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 

爲它的價值,我m跑Windows7的64

編輯:是問題的關鍵,我需要的x64運行PSH作爲x86的過程

感謝

+1

您不應該爲COM對象使用添加類型,而應該從對象IDispatch接口推斷成員。 AFAIK添加類型僅用於添加新的.NET程序集。 – tyranid 2010-02-14 11:09:37

+0

當我向理查德評論時,由於我使用的是64位PSH過程,我從新對象中得到的錯誤誤導了我,這個新對象實際上是拋出的。謝謝! – 2010-02-14 11:15:07

回答

3

help add-type

添加一個Microsoft .NET Framework類型(A類)到Windows PowerShell會話。

windowslivewriter.application不是.NET類型。

的PowerShell(PSH)直接支持COM對象,你不需要採取任何特殊措施來加載類型庫(TLB),只需調用方法diretcly作爲組件在documentation給出。例如:

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

啓動新的文章編輯器。

總結:你做不是需要先加載TLB。

在64位Windows下,您可能需要確保您正在運行PSH的32位實例(「x86」)才能執行此操作(具體取決於Live Writer組件是在進程內還是在進程外運行)。


嚴格地說,這僅適用於支持腳本與IDispatch的COM類型,但在實踐中也有少數沒有。

+0

我被我用New-Object -c得到的錯誤信息誤導了;但實際上它是由於我運行PSH而不是x86的x64實例而引發的,謝謝! – 2010-02-14 11:13:08