首頁 C Sharp Software Automation Use Bat Execute Powershell Command
文章
Cancel

C Sharp Software Automation Use Bat Execute Powershell Command

ㄔㄧ— layout: post title: C# Software automation Use PowerShell Command date: 2022-11-14 11:10 +0800 —

本次範例執行的指令

Desktop View

1
Get-Service | Export-CSV c:\temp\service.csv

使用NotePad++將指令另存成ps1檔

Desktop View

以C#執行ps1

建立.Net Core專案

安裝套件 Cake.Powershell

1
2
3
4
5
6
7
8
9
10
11
NuGet\Install-Package Cake.Powershell -Version 2.0.0 C# Source Code <script  type='text/javascript' src=''>

using System.IO;
using System.Management.Automation;
static void Main(string[] args)
{
    PowerShell ps = PowerShell.Create();
    ps.AddScript(File.ReadAllText(@"C:\Users\User\Downloads\DEMO\PowerShell.ps1")).Invoke();
    ps.Invoke();

}

備註 Cake.Powershell需再NET Core的環境下運行
若有必要請在.Net Framework運行Process.Start()啟動 .Net Core專案的Exe檔

建立.Net Framework專案

附圖為.Net Core的檔案位置 Desktop View

在.Net Framework的專案執行

1
2
3
4
5
6
7
8
9
10
11
12
13
using System.Diagnostics;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string path = @"C:\Users\User\Downloads\DEMO\ConsoleApp3\ConsoleApp3\bin\Debug\net6.0\ConsoleApp3.exe";
            Process.Start(path);
        }
    }
}

失敗時,須調整的設定

如果出現類似附圖情況
Desktop View

先透過PowerShell確認當前原則狀態
Desktop View

1
Get-ExecutionPolicy

微軟的官方文件about_Execution_Policies 有提到我當前的「PowerShell 執行原則」Restricted不允許執行腳本,所以我必須變更原則設定

Desktop View

以變更成RemoteSigned為例

1
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

需使用最高權限執行PowerShell才能成功變更設定
Desktop View

否則會出現
Desktop View

補充 : 使用Bat檔執行ps1的指令

備註: 可能會發生,在改過「原則狀態」後,於.Net Framework環境透過Process.Start()啟動會失敗,
但是Bat手動執行會成功,原因不曉得,
但因為遇到此狀況所以我才改用.Net Core 來解決問題

1
powershell -noexit "& ""C:\Users\User\Downloads\DEMO\PowerShell.ps1"""
本文由作者按照 CC BY 4.0 進行授權