2

私はPowerShellスクリプトを持っています、例えば:function2.ps1 with:

function try2
{
    return "Hello"
}

そして、C#では、次のようになります。

RunspaceConfiguration rsc = RunspaceConfiguration.Create();
Runspace rs = RunspaceFactory.CreateRunspace(rsc);
rs.Open();

RunspaceInvoke si = new RunspaceInvoke(rs);
PowerShell ps = PowerShell.Create();

ps.Commands.AddScript(". .\\function2.ps1");
ps.Invoke();

ps.AddCommand("try2");
ps.Invoke();

これは、try2がコマンドレット、関数、スクリプトファイル、何とか何とか何とかという名前として認識されないことを示すSystem.Managment.Automation.CommandNotFoundExceptionを出します。

これは本当にトリッキーです、私は何が恋しいですか?:)

アップデート:

function.ps1はc:\function.ps1にあります。

現在のアプローチは次のとおりです。

ps.Commands.AddScript(@"cd C:\; . .\function.ps1;try2");
ps.Invoke();

しかし、それでも失敗し、さらに興味深いものです。

ps.Commands.AddScript(@"cd C:\; . .\function222222222222222222.ps1;try2");
ps.Invoke();

function22222222222222222222.ps1は存在しないと100%確信していますが、エラーは発生しません。確かに、ファイルパスの指定に問題があります...

[アップデート]

これは、PowerShellファイルの参照アセンブリのランタイムエラーが原因であることが判明しました。このアセンブリは、現在ロードされているランタイムよりも新しいランタイムによってビルドされ、ロードできません。

ターゲットフレームワークを4.0から3.5に変更した後、helloが出力されていることがわかりました。したがって、エラーはスクリプトの呼び出しに関するものではなく、スクリプト自体に関するものです。ご迷惑をおかけして申し訳ありませんが、皆様、ありがとうございました!

4

2 に答える 2

2

へのフルパスを指定する必要があると思いますfunction2.ps1。「。\function2.ps1」は、C#コードのどこかでスクリプトを変更しない限り、C#プロセスの初期作業ディレクトリが設定されている現在のディレクトリでのみスクリプトを検索します。スクリプトで変更することもできます。例:

ps.Commands.AddScript(@"cd <path>; . .\function2.ps1; try2"); 
于 2013-01-24T21:23:21.063 に答える
0

C#から.ps1スクリプトを実行する1つの方法(非常に近い方法)は、次の場所にあります。

http://www.codeproject.com/Articles/18229/How-to-run-PowerShell-scripts-from-C

スクリプトを実行するために、いくつかのパイプラインコマンドが欠落しているようです。

例えば:

Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript(scriptText);

pipeline.Commands.Add("Out-String");

// execute the script

Collection<psobject /> results = pipeline.Invoke();

System.Management.Automation dllが見つからない場合は、 Windows SDKの最新バージョンをダウンロードする必要があるかもしれません。そうでない場合は、C:\ Program Files(x86)\ReferenceAssembliesにあります。 \ Microsoft \ WindowsPowerShell \ v1.0 \

差出人:VisualStudioでsystem.management.automation.dllを参照する

于 2013-01-24T21:40:09.477 に答える