1

私が持っているものの簡略化されたバージョンは、3 つの powershell スクリプトです。資格情報を使用して他の PowerShell スクリプトを呼び出します。2 番目は、3 番目のスクリプトに格納されている関数を呼び出します。したがって、基本的に、最初のスクリプトのメイン関数は次のようになります。

Invoke-Command -ScriptBlock { param($script,$param) &$script $param} -ArgumentList $scriptToRun,$param) -ComputerName $computerName -Credential $cred

この関数は、次のように渡されたパラメーターを受け取る 2 番目のスクリプトを正常に呼び出します。

param($path) . ./functions.ps1 addToiTunes $path

3 番目のスクリプトには addToiTunes という関数が含まれています。この基本関数は、次のように iTunes 用の COM オブジェクトを作成することから始まります。

function addToiTunes($path) { $iTunes = New-Object -ComObject iTunes.application Write-Host "Completed" }

問題は、Write-Host ステートメントに到達しないことです。New-Object ステートメントでそこでハングアップし、最終的に停止して「スクリプトの実行が完了しました」と表示されます。

なぜこれが発生するのでしょうか?バックグラウンド プロセスで新しい com オブジェクトを作成しようとしているからでしょうか。または、資格情報の呼び出しが実際に機能していない可能性がありますか?

New-Object を呼び出すより良い方法を知っている人はいますか? または、そのアプリケーションの既存のオブジェクトを確認する必要がありますか? 何が問題なのかよくわかりません。

4

2 に答える 2

1

資格情報と関係があるようです。呼び出しからコンピューター名と資格情報を削除すると、CO_E_SERVER_EXEC_FAILURE メッセージが表示されません。資格情報が必要ない場合は、これで問題ありません...

更新 ここの問題に直接関連する新しい質問を作成しました: ScriptBlock で資格情報を使用すると、アプリケーションに接続する COM エラーが発生します

于 2013-10-16T12:23:42.057 に答える
0

これは、Powershell の有名な古いセカンド ホップの問題ではありませんか? Enable-WSManCredSSPを使用してクライアント資格情報の委任を設定する必要があります。次の Scripting Guy を参照してください: http://blogs.technet.com/b/heyscriptingguy/archive/2012/11/14/enable-powershell-quot-second-hop -quot-functionality-with-credssp.aspx

そうしないと、2 番目と 3 番目の powershell スクリプトは資格情報を継承せず、ローカル システムとして実行されます。

于 2013-10-15T13:44:31.440 に答える