2010-08-06 2 views
1

J'utilise le code suivant pour télécharger un fichier à l'aide de PowerShell 1.0. Comment puis-je savoir si le téléchargement s'est terminé avec succès ou s'il y a eu une erreur? J'ai besoin de supprimer le fichier si le téléchargement a réussi. Ce que j'ai essayé:
1. la clause trap. Je n'ai pas l'air de faire fonctionner celui-ci.
2. Vérification de la valeur de retour de webclient.UploadFile $ - cela semble être toujours une chaîne vide, le succès ou nonGestion des exceptions dans Powershell 1.0

$File = "D:\Dev\somefilename.zip" 
$ftp = " ftp://username:[email protected]/pub/incoming/somefilename.zip "

"ftp url: $ftp"

$webclient = New-Object System.Net.WebClient $uri = New-Object System.Uri($ftp)

"Uploading $File..."

$webclient.UploadFile($uri, $File)

Répondre

0

La méthode UploadFile est synchrone. Si elle se termine sans lancer une exception, vous avez eu du succès. Vous devriez obtenir une WebException récupérable si elle échoue.

http://msdn.microsoft.com/en-us/library/36s52zhs.aspx

Je vais laisser des détails sur le piégeage d'erreur, car il semble que vous connaissez déjà.

+0

Tous exemple de piégeage d'erreur serait utile. J'ai essayé trap [Exception] {$ failed = "true"} mais continue d'obtenir des erreurs que Powershell ne reconnaît pas comme piège comme un cmd-let –

+0

Voici une page avec de bons exemples. Notez qu'ils font leur piégeage dans la fonction contenant (pardonnez le jeu de mots) un code exceptionnel, et placez la logique de piège en premier. J'espère que ça aide. http://huddledmasses.org/trap-exception-in-powershell/ – kbrimington

3

Laissez tomber le piège en une nouvelle portée, de sorte que vous piège à l'exception lancée par Ajouter par exemple:

$succeeded = $true; 
& { 
    trap { $script:succeeded = $false; continue } 
    $webclient.UploadFile($uri, $File) 
} 
if ($succeeded) { 'Yay!' } else { 'Doh!' } 

Vous pouvez également essayer d'attraper une exception spécifique comme ceci:

trap [System.Net.WebException] { ... }