如何从C#获取ExecutionPolicy?

问题描述:

我已经使用以下代码来获取执行策略并成功检索它。如何从C#获取ExecutionPolicy?

码块1:

using (var powerShellInstance = PowerShell.Create()) 
{ 
    powerShellInstance.AddCommand("Get-ExecutionPolicy"); 
    Collection<PSObject> obj = powerShellInstance.Invoke(); 
} 

问题是,当我从PowerShell的改变ExecutionPolicy,它不反映在C#。

但是,如果我从C#更改ExecutionPolicy,那么它被反映。我已经使用下面的代码来更改ExecutionPolicy。

码块2:使用代码块1
从改变了ExecutionPolicy为旁路

检索的ExecutionPolicy如C#无限制

using (var powerShellInstance = PowerShell.Create()) 
{ 
    powerShellInstance.AddCommand("Set-ExecutionPolicy").AddArgument("ByPass"); 
    powerShellInstance.Invoke(); 
} 

例如,考虑以下情形PowerShell窗口并使用代码块1在C#中进行了测试,它将检索ExecutionPolicy作为无限制
Change ExecutionPolicy as Bypass using the C#code block 2 and using in C#using the code block 1,it retrieve ExecutionPolicy as Bypass

+0

的设置存储在HKLM下的注册表| HKCU \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell –

范围

Set-ExecutionPolicy -Scope CurrentUser 
Set-ExecutionPolicy -Scope LocalMachine 
Set-ExecutionPolicy -Scope MachinePolicy 
Set-ExecutionPolicy -Scope Process 
Set-ExecutionPolicy -Scope UserPolicy 

相信默认范围是Process(因此您的问题)

+0

这应该是真的。然而,对于Set-ExecutionPolicy的帮助表示默认值不同('LocalMachine'),但我真的怀疑这一点 - 默认情况下使用机器抛出set-executionpolicy的风险足够高。也可能无法设置本地计算机策略cmdlet将范围更改为处理范围。 – Vesper

+0

太好了,我已将范围更改为CurrentUser,然后进行测试,工作正常。 –