C#からpowershellの管理者権限実行ポリシーを変更する

C#.NET

ad2

C#からpowershellの管理者権限実行ポリシーを変更する

C#からPowerShell実行

usingにSystem.Management.Automationが必要になります。

自分の場合は、ローカルフォルダパスは、C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\3.0に格納されていました。

参照追加でSystem.Management.Automation.dllを追加しましょう。

画面設計

画面を今回は、下記の図のようにボタンbuttonとリッチテキストボックスrichtextboxを配置したシンプルなものを作りました。

powershell_policy

ソースコード

では、本題のソースコードは以下の通りになります。

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_policy_result

powerShellの管理者権限の実行ポリシーを変更できました。

まとめ

今回は、C#からPowerShellの管理者権限の実行ポリシーの変更についてサンプルを作成してみました。コメントしてくれてありがとうございます。記事の投稿ネタになりました。感謝m(v_v)m