2019/09/07 00:31 編集
削除
投稿2019/09/06 17:53
LAN内の複数台のWindowsサーバにWinRMで(不定期に複数回)アクセスしたいと考えています.
操作の簡略化 & 自身のプログラミングの勉強のため,GUIでの操作を検討しました.
操作に応じて,複数のPowerShellインスタンスでサーバにコマンドを送信し,結果を見る,という感じです.
そこで,C#でWPFからPowerShellにコマンドし,結果を受け取って整形することを目指しました.
最初に動作確認として,コンソールアプリのプロジェクトで,
PowerShellインスタンスを作成→AddCommand→Invoke
をしようとしたのですが,.Create()という最初の段階で躓いてしまいました.
※CやPythonの経験はありますが,Visual Studio + C#で何か作るのは今回が初です.
単純なコードでも,PowerShellインスタンスを作成しようとすると? 例外が起こってしまいます.
var powershell = PowerShell.Create();
とすると,下記が出ます.
System.InvalidProgramException: 'Common Language Runtime detected an invalid program.'
PowerShellのバージョン,動作bit,System.Management.Automationの場所(Reference Assembliesのパッケージ)が関係していそうだと思い,
C# PowerShell Windows10 のワードで出てくるようなサイトを巡ったのですが,
どこも意外に動いているようで,結局自分にはバージョンの組み合わせもわからず,といった状況です.
C#
1using System; 2using System.Text; 3using System.Management.Automation; 4using System.Management.Automation.Runspaces; 5using System.Security; 6using System.Collections.ObjectModel; 7using System.Diagnostics; 8using System.Collections; 9 10namespace ConsoleApp1test 11{ 12 class Program 13 { 14 static void Main() 15 { 16 try 17 { 18 using (var powershell = PowerShell.Create()) 19 { 20 powershell.AddCommand("Get-ChiledItem"); 21 powershell.AddCommand("Out-String"); 22 23 foreach (var result in powershell.Invoke()) 24 { 25 Console.WriteLine(result); 26 } 27 } 28 Console.WriteLine(" ktkr "); 29 30 } 31 32 catch 33 { 34 Console.WriteLine("ダメです!"); 35 } 36 37 38 } 39 } 40 41 42}
x64, x86, Any CPUで32ビットを選ぶ,32ビットのチェックを外す
1. "C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\3.0\System.Management.Automation.dll"を指定
2. ソリューションのNuGetパッケージ管理から,Microsoft.PowerShell.5.ReferenceAssembliesのv1.1.0をダウンロード(".netcoreapp 2.1 ~ではなく .NET v4.6を使用して復元されました.~" の警告が出ました)
3. 同様のパッケージ管理から,2.のを消して5.1をダウンロード.同様の警告が出ました
NU1701 パッケージ 'Microsoft.PowerShell.5.ReferenceAssemblies 1.1.0' はプロジェクトのターゲット フレームワーク '.NETCoreApp,Version=v2.1' ではなく '.NETFramework,Version=v4.6.1' を使用して復元されました。このパッケージは、使用しているプロジェクトとの完全な互換性がない可能性があります。
OS:Windows 10 Pro 1809
IDE:Visual Studio Community 2019 Version 16.2.3
.NET Framework Version 4.7.03190
PowerShell: 5.1.17763.316 (Get-Host)
※PSの別バージョンを故意にインストールしようとことはありません.
最終的に,冒頭で述べた動作ができれば良いので,WinRM on GUIな良い方法があれば,そちらでもご教授いただければ有り難いです.
よろしくお願いします.
回答1件
あなたの回答
tips
プレビュー