什么是PowerShell中的终止和非终止错误?

Powershell执行脚本或命令时会生成两种类型的错误。终止错误和非终止错误。

终止错误-该错误是由您创建的脚本,函数或命令生成的,并且会停止或停止脚本的执行,从而导致下一行中的命令无法执行。要处理此错误,需要适当的机制,否则将显示错误消息。

例如,

PS C:\WINDOWS\system32>> This-commandnotexist
This-commandnotexist : The term 'This-commandnotexist' is not recognized as
the name of a
cmdlet, function, script file, or operable program. Check the spelling of the
name, or if a
path was included, verify that the path is correct and try again.
At line:1 char:1
+ This-commandnotexist
+ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (This-commandnotexist:String)
[], CommandNotFo
undException
+ FullyQualifiedErrorId : CommandNotFoundException

非终结错误-此错误通常由内部cmdlet生成,并且仅由内部cmdlet自动处理,但该错误不会终止管道的执行。您无法自动处理此类错误,因为默认情况下$ErrorActionPreference的值为$Continue,但是有些方法可以通过将非终止错误转换为终止错误来进行处理。

在下面的示例中,我们将搜索不存在的计算机上的逻辑磁盘。

PS C:\WINDOWS\system32>> Get-WmiObject -Class Win32_Logicaldisk -ComputerName
Nonexist
Get-WmiObject : The RPC server is unavailable.
At line:1 char:1
+ Get-WmiObject -Class Win32_Logicaldisk -ComputerName Nonexist
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Get-WmiObject],
COMException
+ FullyQualifiedErrorId :
GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiO bjectCommand

上面的错误是由cmdlet生成的,它是一个非终止错误。您可以使用ErrorAction cmdlet,$ErrorActionPreference变量来处理终止和非终止错误(通过将它们转换为终止错误),然后尝试,捕获并最终阻止。