Question

En Powershell il y a une exception que je ne suis pas capable de piéger ou je ne suis pas en train de faire des choses correctes.

Voici donc le code qui fait les choses:

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
    }
}

J'ai eu un commentaire sur le type dans l'expression de piège pour être sûr de quoi que ce soit des prises. Mais malheureusement, je ne vais jamais dans la clause piège.

Je peux voir le journal d'exception, mais pas le "Move to trash" journal.

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
Était-ce utile?

La solution

Le piège ne déclenche sur une erreur de terminaison.

  rm "$($_.Name).old" -ErrorAction "Stop" 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top