【发布时间】:2020-03-05 09:07:13
【问题描述】:
我正在编写一个脚本,以便在使用之前准备好我们的笔记本电脑。它本质上是安装证书并将执行策略设置为 AllSigned。
它通过鼠标右键单击和“使用 Powershell 运行”来执行。这是对执行策略的 Windows 10 标准绕过,让脚本在未修改的 Windows 10 机器上运行(至少在我看来是这样)。所以我可以执行我的脚本,而无需显式更改执行策略。
脚本运行后,机器就设置好了。我只是收到一个我想压制的警告。
为了在脚本中执行此操作,我使用绕过参数将脚本提升为管理员权限。除了我在设置 AllSigned 执行策略时收到警告之外,这一切正常。它说我有一个在更具体的范围内定义的策略。
注意:该命令有效并且已设置执行策略。它只是弹出红色,看起来像一个错误。如果其他人执行脚本,我不想弹出问题。
--我的问题:--
据我所知,这种行为是有意的,我不希望出现警告。我怎样才能抑制消息?
我尝试使用“WarningAction”和“ErrorAction”开关进行各种设置,但都不起作用。
一些细节:
错误消息:
Set-ExecutionPolicy:Windows PowerShell 更新了您的执行策略 成功,但该设置被在 更具体的范围。由于覆盖,您的外壳将保留其 Bypass 当前有效的执行策略。类型 “Get-ExecutionPolicy -List”查看您的执行策略设置。 有关详细信息,请参阅“Get-Help Set-ExecutionPolicy”。在 C:\Users\uwe\Desktop\InstallRootCA\InstallRootCertificate.ps1:46 字符:5 + Set-ExecutionPolicy AllSigned -Scope LocalMachine -Force + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~ + CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy], SecurityException + FullyQualifiedErrorId : ExecutionPolicyOverride,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand
powershell 脚本中的相关代码部分:
在执行之前提升脚本:
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Start-Process PowerShell -Verb RunAs "-NoProfile -ExecutionPolicy Bypass -Command `"cd '$pwd'; & '$PSCommandPath';`"";
exit;
}
在脚本末尾设置执行策略:
Set-ExecutionPolicy AllSigned -Scope LocalMachine
我尝试了各种标志
-Force
-WarningAction Ignore|SilentlyContinue
-ErrorAction same
但还是会弹出红色警告。
【问题讨论】:
-
错误告诉你 PermissionDenied ,对我来说命令
-force工作良好,没有任何弹出窗口。 PS 以管理员身份运行。 -
它以管理员身份运行。提升代码以管理员身份重新启动脚本。但这就是问题所在。由于绕过该策略,它会创建一个警告。代码运行良好。
-
我尝试使用参数
-force设置每项政策,但没有人显示警告、弹出窗口或其他内容。 -
只有当你先用提升代码编写脚本并在脚本中设置执行策略时才会出现警告。而 LocalMachine 策略在开始之前设置为 Restricted。
标签: powershell