gpt4 book ai didi

powershell - 抑制 powershell 中的错误并显示自定义错误消息

转载 作者:行者123 更新时间:2023-12-03 17:24:24 30 4
gpt4 key购买 nike

我创建了一个 PowerShell 脚本,该脚本将为 Cisco Meraki 添加 VPN 连接。
脚本本身按预期运行,但如果发生错误,则会出现“已完成”弹出窗口,并在 PS 窗口中显示错误消息。

是否可以抑制错误并根据出现的错误显示自定义错误弹出窗口,同时阻止“已完成”弹出窗口的出现?

我知道 $ErrorActionPreference= 'silentlycontinue' ,但不确定如何使用自定义错误实现这一点。

Script to add VPN connections for Cisco Meraki.


$Name = Read-Host -Prompt 'Enter the profile name for this VPN connection'
$password = Read-Host -assecurestring "Please enter your Pre-shared Key"
$password = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($password))
Add-VpnConnection -Name "$Name" -ServerAddress 193.214.153.2 -AuthenticationMethod MSChapv2 -L2tpPsk "$password" -TunnelType L2tp -RememberCredential -Force
$wshell = New-Object -ComObject Wscript.Shell
$wshell.Popup("VPN-profile for $Name has been created.
You may now use this connection.
Username and password is required on first time sign on.
Support: _witheld_ | _witheld_",0,"Completed")

最佳答案

由于您的脚本在发生错误后继续运行,您正在处理非终止错误 ,所以你可以 使用 -ErrorVariable common parameter捕获给定 cmdlet 调用的错误 .

使用一个简化的示例,您可以将其类似地应用于您的 Add-VpnConnection称呼:

 # Call Get-Item with a nonexistent path, which causes a *non-terminating* error. 
# * Capture the error with -ErrorVariable in variable $err.
# * Suppress the error console output with -ErrorAction SilentlyContinue
Get-Item /NoSuch/Path -ErrorVariable err -ErrorAction SilentlyContinue

$null = (New-Object -ComObject Wscript.Shell).Popup(
$(if ($err) { "Error: $err" } else { 'Success.' })
)

如果您正在处理 终止错误 ,你必须 使用 try/catch :
 # Call Get-Item with an unsupported parameter, which causes a 
# *(statement-)terminating* error.
try {
Get-Item -NoSuchParam
} catch {
# Save the error, which is a [System.Management.Automation.ErrorRecord]
# instance. To save just a the *message* (a string), use
# err = "$_"
$err = $_
}

$null = (New-Object -ComObject Wscript.Shell).Popup(
$(if ($err) { "Error: $err" } else { 'Success.' })
)

笔记:
  • 都没有 -ErrorAction也不是 -ErrorVariable处理终止错误。
  • 相反,try/catch不能用于处理非终止错误,这大概就是为什么 Ranadip Dutta's answer没有为你工作。

  • 有关 PowerShell 错误处理的全面讨论,请参阅 this GitHub issue .

    关于powershell - 抑制 powershell 中的错误并显示自定义错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54783451/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com