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)
但仍然弹出红色警告。
您可以将此命令放入 try catch 语句中。catch 语句将处理错误,如果它为空,则Set-ExecutionPolicy抛出错误时不会发生任何事情。
try{
Set-ExecutionPolicy AllSigned -Scope LocalMachine
}
catch {
#Do Nothing
}
Run Code Online (Sandbox Code Playgroud)
请测试一下,让我知道它是否有效,如果有效,请将帖子标记为答案:)