如何在调用 Set-ExecutionPolicy 时抑制脚本中的警告消息

Uwe*_*ner 3 error-handling powershell

我正在编写一个脚本来在使用前准备我们的笔记本电脑。它本质上是安装证书并将执行策略设置为 AllSigned。

它通过单击鼠标右键并“使用 Powershell 运行”来执行。这是执行策略的 Windows 10 标准绕过,让脚本在未修改的 Windows 10 计算机上运行(至少对我来说是这样的)。因此我可以执行我的脚本,而无需显式更改执行策略。
脚本运行后,机器就设置好了。我刚刚收到一个我想压制的警告。

为了在脚本内执行此操作,我使用旁路参数将脚本提升为管理员权限。除了在设置 AllSigned 执行策略时收到警告之外,这工作正常。它说我有一个在更具体范围内定义的政策。

注意:该命令有效并且执行策略已设置。它只是弹出红色,看起来像一个错误。如果其他人执行该脚本,我不希望出现问题。

--我的问题: --
据我所知,这种行为是有意为之的,我不希望出现警告。我怎样才能抑制该消息?

我尝试使用开关“WarningAction”和“ErrorAction”进行各种设置,但它不起作用。

一些详细信息:
错误消息:

Set-ExecutionPolicy :Windows PowerShell 已成功更新您的执行策略,但该设置被更具体范围定义的策略覆盖。由于覆盖,您的 shell 将保留其当前有效的 Bypass 执行策略。键入“Get-ExecutionPolicy -List”以查看您的执行策略设置。有关详细信息,请参阅“Get-Help Set-ExecutionPolicy”。在 C:\Users\uwe\Desktop\InstallRootCA\InstallRootCertificate.ps1:46 char:5 + Set-ExecutionPolicy AllSigned -Scope LocalMachine -Force + ~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy] ,SecurityException + FullQualifiedErrorId: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;
 }
Run Code Online (Sandbox Code Playgroud)

在脚本末尾设置执行策略:

Set-ExecutionPolicy AllSigned -Scope LocalMachine
Run Code Online (Sandbox Code Playgroud)

我尝试了各种标志

-Force
-WarningAction Ignore|SilentlyContinue
-ErrorAction same
Run Code Online (Sandbox Code Playgroud)

但仍然弹出红色警告。

Nic*_*alu 6

您可以将此命令放入 try catch 语句中。catch 语句将处理错误,如果它为空,则Set-ExecutionPolicy抛出错误时不会发生任何事情。

try{
    Set-ExecutionPolicy AllSigned -Scope LocalMachine
}
catch {
    #Do Nothing
}
Run Code Online (Sandbox Code Playgroud)

请测试一下,让我知道它是否有效,如果有效,请将帖子标记为答案:)