如何从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。
范围!
Set-ExecutionPolicy -Scope CurrentUser
Set-ExecutionPolicy -Scope LocalMachine
Set-ExecutionPolicy -Scope MachinePolicy
Set-ExecutionPolicy -Scope Process
Set-ExecutionPolicy -Scope UserPolicy
我相信默认范围是Process
(因此您的问题)
这应该是真的。然而,对于Set-ExecutionPolicy的帮助表示默认值不同('LocalMachine'),但我真的怀疑这一点 - 默认情况下使用机器抛出set-executionpolicy的风险足够高。也可能无法设置本地计算机策略cmdlet将范围更改为处理范围。 – Vesper
太好了,我已将范围更改为CurrentUser,然后进行测试,工作正常。 –
的设置存储在HKLM下的注册表| HKCU \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell –