.net-coreからPowerShellスクリプトを実行する方法はありますか?
新しい.netコア 'website\api'でPowerShellスクリプトを実行しようとしています。 PowerShellを.netで実行するために私が言えることから、
System.Management.Automation名前空間。
これは.netコアでは不可能です(または、追加する適切な方法が見つかりませんでした)。プロジェクトにこのDLLを追加することを目的としたNuGetパッケージがいくつかありますが、これらは.netコアとも互換性がありません。netコアでこれを行う方法はありますか?ここに私が試したいくつかのリンクがありますが、いずれも.netコア固有ではありません:
http://www.powershellmagazine.com/2014/03/18/writing-a-powershell-module-in-c-part-1-the-basics/
Visual Studioのsystem.management.automation.dllを参照
https://www.nuget.org/packages/System.Management.Automation/
公式の答え は、独自のアプリケーションからPowerShell Coreを実行することは現在サポートされていないということです。おそらく最大の問題は、.Net CoreにAppDomain.GetAssemblies()
がないことです。これは.Net Core 1.2で修正される可能性があります。
.NET Core 2.0およびPowerShell 6 Beta 3の時点で十分にサポートされているようですが(ベータ1および2でもサポートされていましたが、それほど簡単ではありません)、 GitHubのホストPowerShellドキュメントへのリンクがありますリポジトリ
そして、.NET Core 2.0およびPowerShell Core v6.0.0-beta.3以降で実行されていることを示す優れたサンプルアプリケーションを提供します。
https://github.com/PowerShell/PowerShell/tree/master/docs/Host-powershell
NuGetパッケージリストに正しいパッケージを取得するには、powershell-coreを新しいNuGetリポジトリの場所として追加する必要がありました。
https://powershell.myget.org/F/powershell-core/api/v3/index.json
次に、NuGetパッケージをインストールできます。
install-package Microsoft.powershell.sdk -version 6.0.0-rc
install-package Microsoft.powershell.commands.diagnostics -version 6.0.0-rc
install-package Microsoft.wsman.management -version 6.0.0-rc
これらの3つの依存関係がすべて必要だったため、asp.netコアMVC Webアプリケーションで次の簡単なPowerShellコマンドを実行できました。
public class PowerShellHelper
{
public void Execute(string command)
{
using (var ps = PowerShell.Create())
{
var results = ps.AddScript(command).Invoke();
foreach (var result in results)
{
Debug.Write(result.ToString());
}
}
}
}
James Ebyの答えは正しいのですが、役に立つと思われる新しい情報がいくつかあります。
PowerShell Core がクロスプラットフォームで使用可能になりました。そして、それはオープンソースです!
Microsoft の記事からの便利なポイントを次に示します。
MacOSでは、PowerShellはネイティブのos_log APIを使用してAppleの統合ログシステムにログを記録します。 Linuxでは、PowerShellはユビキタスログソリューションであるSyslogを使用します。
PowerShell Remoting Protocol(PSRP)は、従来のWinRMベースのPSRPに加えて、Secure Shell(SSH)プロトコルと連携するようになりました。 ソース
@Romanおよび@JamesEbyのThx。
Dotnet core 2.0以降を使用できず、Process
を使用してWindowsでPowerShell.exeを実行できる場合。
パスは_C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
_であり、このコードでProcess
を使用できます。
_ var process = new Process
{
StartInfo = new ProcessStartInfo(@"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe",
script)
{
WorkingDirectory = Environment.CurrentDirectory,
RedirectStandardOutput = true,
CreateNoWindow = true,
}
};
process.Start();
var reader = process.StandardOutput;
return reader.ReadToEnd();
_
スクリプト値はPowerShellスクリプトであり、reader.ReadToEnd()
はPower Shell出力テキストを返します。