一个简单的Try/catch不起作用

Ade*_*SIF 2 powershell exception powershell-2.0 powershell-3.0

这是我的代码,非常简单:

$TargetFolder = 'M:\'

try{

$Getfolderlist = Get-ChildItem $TargetFolder -Recurse | ? { $_.PSIsContainer -and $_.Name -eq 'old' }

}catch {

Write-Host "Error ! :) "    

}
Run Code Online (Sandbox Code Playgroud)

它不起作用,我得到一个PowerShell异常:

Get-ChildItem : Cannot find drive. A drive with the name 'M' does not exist.
At C:\ef-scripts\PurgeDeliveryZip\purge_delivery_zip.ps1:23 char:18
+ $Getfolderlist = Get-ChildItem $TargetFolder -Recurse | ? { $_.PSIsContainer -an ...
+                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (M:String) [Get-ChildItem], DriveNotFoundException
    + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

rav*_*nth 7

您需要将-ErrorAction设置为Stop.这样catch块就会获得异常.在这里阅读try catch用法:http://technet.microsoft.com/en-us/library/hh847793.aspx

此外,您可能希望了解有关PowerShell中的终止错误和ErrorAction常见参数的帮助.

$TargetFolder = 'M:\'

try{
$Getfolderlist = Get-ChildItem $TargetFolder -Recurse -Ea Stop | ? { $_.PSIsContainer -and $_.Name -eq 'old' }
}
catch {
Write-Host "Error ! :) "    
}
Run Code Online (Sandbox Code Playgroud)