[英]C# PowerShell Script not working with ExecutionPolicy
我正在嘗試在 .netCore 上使用 C# 運行 PowerShell 腳本。
我現在嘗試了許多不同的解決方案,但似乎沒有一個有效。 我只想執行一個 PowerShell 腳本並設置 ExecutionPolicies 和 Scope 以使其工作。 但我總是有一個例外,即 ExecutionPolicies 不允許我以這種方式運行腳本。
盡管有實際的配置和代碼,你會在下面找到,在到達.Invoke();之后,我沒有從調試器那里得到任何反饋。 被執行。 等待響應並讓軟件在后台執行其操作總是會導致 stackoverflow 異常。
commandParameters 是一個簡單的 Dictionary<string, string>
對此有何想法?
干杯。
var iss = InitialSessionState.CreateDefault2();
// Set its script-file execution policy.
iss.ExecutionPolicy = Microsoft.PowerShell.ExecutionPolicy.Unrestricted;
iss.ExecutionPolicy = (ExecutionPolicy)Microsoft.PowerShell.ExecutionPolicyScope.CurrentUser;
// Create a PowerShell instance with a runspace based on the
// initial session state.
PowerShell ps = PowerShell.Create(iss);
ps.AddCommand(path + "\\" + fileName);
ps.AddParameters(commandParameters);
var results = ps.InvokeAsync().GetAwaiter().GetResult();
分配給iss.ExecutionPolicy
只控制當前進程的執行策略。
不要指派Microsoft.PowerShell.ExecutionPolicyScope
價值,因為它是一個無關的枚舉定義執行政策范圍,只與該Set-ExecutionPolicy
和Get-ExecutionPolicy
cmdlet的。 此無關枚舉的數值恰好與適當的[Microsoft.PowerShell.ExecutionPolicy]
枚舉值重疊,因此策略范圍CurrentUser
映射到策略RemoteSigned
(值0x1
)。
iss.ExecutionPolicy = ...
分配覆蓋了第一個並將流程范圍執行策略設置為RemoteSigned
。 因此, iss.ExecutionPolicy = Microsoft.PowerShell.ExecutionPolicy.Unrestricted;
單獨調用當前會話中的*.ps1
文件就足夠了-刪除第二個iss.ExecutionPolicy = ...
賦值。
如果要持久修改執行策略,則必須使用.AddCommand('Set-ExecutionPolicy')
和適當的參數並調用該命令。 警告:
更改持久當前用戶配置也會對相應 PowerShell 版本中的常規PowerShell 會話(交互式會話/CLI 調用)生效。
相比之下,如果您更改持久機器配置 - 這需要以提升運行(以管理員身份):
有關示例代碼,請參閱此答案。
警告:
如果當前用戶/機器的執行策略是通過GPO (組策略對象)控制的,則您基本上無法以編程方式覆蓋它(通過 GPO 更改除外)。
要檢查基於 GPO 的策略是否有效:
Get-ExecutionPolicy -List
以按優先級降序Get-ExecutionPolicy -List
為每個可用范圍定義的策略。MachinePolicy
或UserPolicy
范圍比其它的值Undefined
,那么GPO策略生效(運行Get-ExecutionPolicy
不帶參數來查看當前會話的有效的政策)。 [1] Windows PowerShell將執行策略存儲在注冊表中,常規會話和 SDK 都會咨詢。 相比之下, PowerShell (Core)將它們存儲在powershell.config.json
文件中,並且在機器策略的情況下與 PowerShell 可執行文件 (DLL) 一起存儲。 由於SDK的項目有自己的可執行文件,隨之而來的JSON文件不是由一個普通的PowerShell(核心)安裝可執行看到。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.