![](/img/trans.png)
[英]How to execute a powershell script using c# and setting execution policy?
[英]Visual Studio can't execute a Powershell script due to execution policy
我正在嘗試在 c# 應用程序中運行基本的 powershell 腳本,但我似乎無法運行它。 我已經嘗試過這段代碼,無論是否在管道創建中添加了執行策略代碼,都得到了相同的結果。
static void Main(string[] args)
{
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
Pipeline pipeline = runspace.CreatePipeline("Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned");
pipeline.Commands.Add(@"C:\Users\Bob\Desktop\testScript.ps1");
// Execute PowerShell script
var results = pipeline.Invoke();
}
我收到的錯誤是這樣的:
System.Management.Automation.PSSecurityException: '文件 C:\Users\Bob\Desktop\testScript.ps1 無法加載,因為在此系統上禁用運行腳本。 有關詳細信息,請參閱https://go.microsoft.com/fwlink/?LinkID=135170 上的 about_Execution_Policies。
當我運行“get-executionpolicy -list”時,我的執行策略似乎沒問題。
通常,持久配置的腳本執行策略也適用於基於PowerShell SDK的項目,例如您的項目。
雖然您的Get-ExecutionPolicy
-List
output 暗示RemoteSigned
是有效的策略(如您省略-List
時所報告的那樣),但屏幕截圖的顏色表明您正在要求Windows PowerShell的策略,它與執行策略分開跨平台,按需安裝PowerShell (Core) v6+版。
因此,您無法執行本地腳本( RemoteSigned
應該允許)可能有以下兩個原因之一:
如果您的項目基於 SDK for PowerShell (Core) v6+ (通過Microsoft.PowerShell.SDK
NuGet 包),您必須咨詢 - 並可能修改 -它的有效執行策略(運行pwsh -c Get-ExecutionPolicy
以查看 the政策生效)
正如 Mathias 在評論中指出的那樣,另一個可能的原因是您的本地腳本可能是通過 web 瀏覽器從 web下載的,在這種情況下,出於執行策略的目的,它被視為遠程文件。 將其文件路徑作為一次性操作傳遞給Unblock-File
應該可以解決問題。
退一步說:
如果您信任要調用的本地腳本,則可以通過相應地配置您的 PowerShell SDK session 來繞過您的應用程序的執行策略- 請參閱此答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.