我正在嘗試在 ac# 應用程式中運行一個基本的 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 無法加載,因為在此系統上禁用了運行腳本。有關詳細資訊,請參閱
uj5u.com熱心網友回復:
通常,持久配置的腳本執行策略 也適用于基于PowerShell SDK的專案,例如您的專案。
雖然您的輸出暗示這是有效的策略(如您省略時報告的那樣),但螢屏截圖的顏色表明您要求的是Windows PowerShell的策略,該策略與跨平臺安裝的執行策略不同需要PowerShell (Core) v6 版本。
Get-ExecutionPolicy-ListRemoteSigned-List因此,您無法執行本地腳本(
RemoteSigned應該允許)可能有以下兩個原因之一:如果您的專案基于適用于PowerShell (Core) v6 的 SDK (通過
Microsoft.PowerShell.SDKNuGet 包),您必須查閱 - 并可能修改 -其有效的執行策略(運行pwsh -c Get-ExecutionPolicy以查看生效的策略)- 如果您實際上沒有安裝 PowerShell (Core) 6 本身(即,如果您只使用它的SDK),請使用底部的解決方案 - 無論如何這可能更可取。
正如 Mathias 在評論中指出的那樣,另一個可能的原因是您的本地腳本可能是通過網路瀏覽器從網路下載的,在這種情況下,出于執行策略的目的,它被視為遠程檔案。
Unblock-File將其檔案路徑作為一次性操作傳遞應該可以解決問題。
退后一步:
如果您信任要呼叫的本地腳本,則可以通過相應地配置 PowerShell SDK 會話來繞過僅適用于您的應用程式的執行策略- 請參閱此答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/444135.html
標籤:C# 视觉工作室 电源外壳 视觉工作室 2022 执行政策
