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タイプ(クラス)をWindowsPowerShellセッションに追加します。

ただし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 に答える