题
在Powershell中,有一些例外,我无法陷入困境,或者我没有做纠正事物。
因此,这是执行事情的代码:
log "Processing $($_.Name).old" $logFile
if (Test-Path "$($_.Name).old" )
{
& {
rm "$($_.Name).old"
}
trap #[System.UnauthorizedAccessException]
{
log "Move to trash" $logFile
moveTrach "$($_.Name).old"
continue
}
}
我已经评论了陷阱表达式中的类型,以确保捕获任何东西。但是不幸的是,我从未进入陷阱条款。
我可以看到异常日志,而不是“移动垃圾”日志。
2012-02-16 10:35:31 Processing file.dll
Remove-Item : Cannot remove item file.dll.old: Access to the path 'file.dll.old' is denied.
At upgradegw.ps1:189 char:29
+ rm <<<< "$($_.Name).old"
+ CategoryInfo : PermissionDenied: (file.dll.old:FileInfo) [Remove-Item], UnauthorizedAccessException
+ FullyQualifiedErrorId : RemoveFileSystemItemUnAuthorizedAccess,Microsoft.PowerShell.Commands.RemoveItemCommand
2012-02-16 10:35:31 Processing file2.dll
解决方案
陷阱只会在终止错误上触发。
rm "$($_.Name).old" -ErrorAction "Stop"
不隶属于 StackOverflow