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