C#からpowershellの管理者権限実行ポリシーを変更する
C#からPowerShell実行
usingにSystem.Management.Automationが必要になります。
自分の場合は、ローカルフォルダパスは、C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\3.0に格納されていました。
参照追加でSystem.Management.Automation.dllを追加しましょう。
画面設計
画面を今回は、下記の図のようにボタンbuttonとリッチテキストボックスrichtextboxを配置したシンプルなものを作りました。
ソースコード
では、本題のソースコードは以下の通りになります。
using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Management.Automation; using System.Management.Automation.Runspaces; using System.Windows.Forms; namespace csharp_powershell_sample { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { Runspace runspace = RunspaceFactory.CreateRunspace(); runspace.Open(); PowerShell powershell = PowerShell.Create(); List<PSCommand> pscmdList = new List<PSCommand>(); //現在値(変更前)の管理者権限実行ポリシーを取得する pscmdList.Add(new PSCommand().AddCommand("Get-ExecutionPolicy")); //管理者権限 実行ポリシーを変更(RemoteSigned) pscmdList.Add(new PSCommand().AddCommand("Set-ExecutionPolicy") .AddParameter("Scope", "CurrentUser") .AddArgument("RemoteSigned")); //Restricted : 全てのスクリプトが制限される //AllSigned : 全て(All )の署名付き(Signed)スクリプトのみ実行可能。署名がないものは実行禁止。 //RemoteSigned : ローカルのファイルは実行可能。インターネットからダウンロードした外部のスクリプトは署名が必要。 //Unrestricted : 全てのスクリプトが制限なし。ただし、インターネットからダウンロードしたファイルは実行時、確認される。 //Bypass : 警告や確認なしに、すべてのファイルが実行可能。 //現在値(変更後)の管理者権限実行ポリシーを取得する pscmdList.Add(new PSCommand().AddCommand("Get-ExecutionPolicy")); foreach (PSCommand pscmd in pscmdList) { powershell.Commands = pscmd; powershell.Runspace = runspace; // スクリプトを実行する Collection<PSObject> adapts = powershell.Invoke(); foreach (PSObject res in adapts) { richTextBox1.AppendText("Result: " + res.ToString()); richTextBox1.AppendText("\n"); //改行する } } runspace.Close(); } } }
結果
上記のコードを実行して、ボタンをクリックすると、結果がリッチテキストボックスに表示されます。
powerShellの管理者権限の実行ポリシーを変更できました。
まとめ
今回は、C#からPowerShellの管理者権限の実行ポリシーの変更についてサンプルを作成してみました。コメントしてくれてありがとうございます。記事の投稿ネタになりました。感謝m(v_v)m