Domanda

In PowerShell c'è qualche eccezione che non sono in grado di intrappolare o io non sto facendo le cose giuste.

Così qui è il codice che fa le cose:

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

ho avuto commentare il tipo nell'espressione trappola per essere sicuri di prendere qualcosa. Ma purtroppo non vado mai nella clausola di trappola.

Posso vedere il registro un'eccezione, ma non il "Sposta nel cestino" log.

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
È stato utile?

Soluzione

La trappola attiverà solo su un errore fatale.

  rm "$($_.Name).old" -ErrorAction "Stop" 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top