簡體   English   中英

由於執行策略,Visual Studio 無法執行 Powershell 腳本

[英]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政策生效)

      • 如果您實際上沒有安裝 PowerShell (Core) 6+ 本身(即,如果您只使用它的SDK ),請使用底部的解決方案 - 無論如何這可能更可取。
    • 正如 Mathias 在評論中指出的那樣,另一個可能的原因是您的本地腳本可能是通過 web 瀏覽器從 web下載的,在這種情況下,出於執行策略的目的,它被視為遠程文件。 將其文件路徑作為一次性操作傳遞給Unblock-File應該可以解決問題。


退一步說:

如果您信任要調用的本地腳本,則可以通過相應地配置您的 PowerShell SDK session 來繞過您的應用程序的執行策略- 請參閱此答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM