2

ac# プログラムから PowerShell コマンドを実行しようとすると、「現在のホストが実装していないため、関数を呼び出すことができません」という例外が発生します。

スクリーンショット

ac# プログラムから PowerShell コマンドを実行しようとすると、「現在のホストが実装していないため、関数を呼び出すことができません」という例外が発生します。

これが私が実行していることです…</p>

public string RunScript(string cmd)
{
var initial = InitialSessionState.CreateDefault();
initial.ImportPSModule(new[] { @"C:\Intellitrace\Microsoft.VisualStudio.IntelliTrace.PowerShell.dll" });
var runspace = RunspaceFactory.CreateRunspace(initial);
runspace.Open();
RunspaceInvoke invoker = new RunspaceInvoke(runspace);

// results =
invoker.Invoke(
@"Start-IntelliTraceCollection ""DefaultAppPool"" C:\Intellitrace\collection_plan.ASP.NET.trace.xml C:\IntellitraceLogs");

コマンド Start-IntelliTraceCollection は、IIS インストルメンテーション中に Cmdlet.Write* を使用して詳細なログを書き込みます。例外を引き起こしているのは write-host の動作方法だと思います。このリンクは、How to run PowerShell scripts via Automation without running into Host issuesでは、書き込みホスト関数を作成してそれを実行空間に挿入するか、アプリに PowerShell ホスティング インターフェイスを実装することを推奨しているようです。これを行う方法に関するコードサンプルは非常に役立ちます。

ここで同様の質問を参照しました C#でpowershellコマンドを実行すると、「現在のホストが実装していないため、この関数を呼び出すことができません」というエラーが表示されますが、 PSHostを実装すること-Confirm:$falseForceこれを修正する方法に興味があります、PSHostUserInterface および PSHostRawUserInterface です。これを行う方法についてコードサンプルを提供できる人がいれば、非常に便利です。

4

2 に答える 2

1

(PSHostUserInterface インターフェイスで) カスタム ホストを作成するときに実装を提供するメソッドの 1 つは、次のとおりです。

    Public Sub WriteVerboseLine(message As String)

ホスト (PSHostUserInterface を提供できるホスト) を提供していないため、write-verbose呼び出しの処理方法を指定していません。

それは理にかなっていますか?

于 2012-07-23T12:03:40.807 に答える
0

「write-host」を使用すると、このエラーが発生します。「write-host」の代わりに、qoutesに必要なものを直接入力するだけで、修正されます。

例:の代わりに

write-host 'ERROR! There is no free space for the selected category.'

私が使う

"ERROR! There is no free space for the selected category."

注:私のシナリオは、C#からテキストファイルでPowerShellスクリプトを呼び出しています

于 2013-01-31T08:39:01.233 に答える