PowerShell Invoke-WebRequest, comment utiliser automatiquement le nom de fichier d'origine?
Comment puis-je utiliser Invoke-WebRequest pour télécharger un fichier, mais le faire automatiquement le nom de fichier de la même manière que si j'ai téléchargé via un navigateur? Je n'ai pas trouvé un moyen de faire -OutFile
travail sans spécifier manuellement le nom de fichier. Je suis très bien avec ce, concernant quelques autres lignes de code.
Une bonne solution:
- De travail même si le nom de fichier n'est pas dans l'URL de la requête. Par exemple, l'URL de téléchargement de Visual Studio x64 Outils de Débogage à Distance est
http://go.microsoft.com/fwlink/?LinkId=393217
mais il télécharge le fichierrtools_setup_x64.exe
. - Pas sauver tout le fichier en mémoire avant de les écrire sur le disque, à moins que Invoke-WebRequest déjà fait de même avec l'-OutFile paramètre (?)
Merci!
- Ce qui se passe lorsque vous utilisez l'url directe dans votre extrait de code -
http://download.microsoft.com/download/D/2/8/D28C6482-555B-4777-876F-85897C071FB6/rtools_setup_x64.exe
- Apparemment Invoke-WebRequest encore vous oblige à spécifier le nom de fichier local.
- Je tiens à ajouter, une bonne solution d'utiliser le Contenu de l'en-tête de Disposition pour résoudre le nom du fichier.
wget
etcurl
faire tout cela et c'est une simple attente d'une commande de téléchargements d'une URL à un nom de fichier. De nombreux services de servir un "fichier", mais derrière une URL qui n'est pas lui-même contient le nom de fichier. - Je n'ai trouver PS cette mise en œuvre qui fait honneur à l'-tête Content-Disposition. Il serait peut-être possible d'extraire simplement que la fonctionnalité pour créer un PS qui l'Invoque-WebRequest peut être transmis à enregistrer le fichier à l'aide de la meilleure indication du nom de fichier à partir de la réponse.
Vous devez vous connecter pour publier un commentaire.
Pour l'exemple donné, vous allez avoir besoin d'obtenir l'URL redirigée, qui comprend le nom du fichier à télécharger. Vous pouvez utiliser la fonction suivante pour le faire:
Puis c'est une question d'analyser le nom de fichier à partir de la fin de la réponse de l'URL (GetFileName à partir du Système.IO.Chemin va le faire):
Qui laissera
$FileName = rtools_setup_x64.exe
et vous devriez être en mesure de télécharger votre fichier à partir de là.Invoke-Webrequest -Uri $uri -OutFile $(Split-Path -Path $uri -Leaf)
Merci à Ryan, j'ai un semi-utilisable de la fonction:
Un fichier graphique et le fichier xml j'ai pu télécharger. Lorsque j'essaie de télécharger cette page web et de l'ouvrir avec Edge, il va travailler à la fois.
Essayer cette méthode, qui peut ne pas toujours fonctionner car le nom de fichier ne peut pas être dans l'en-tête de réponse)
inline; filename="zzzz.docx"
Voici le code sampe:
Essence de mon code, cela fonctionne.. à l'aide de PS 5.1
J'ai commenté à la normale -Outfile instruction, car cela impliquerait que je connaissais le nom de fichier à l'avance.
J'ai mis cet ensemble repose sur un certain nombre de sources, il y a beaucoup de façons de l'analyse du Contenu-Disposition des en-têtes afin d'utiliser tout ce qui fonctionne pour vous.
L'appel:
analyse
L'écriture du fichier (ce est la plupart du temps en format pdf pour moi
powershell.exe Invoquer-WebRequest -Uri serverIP/file.exe -OutFile C:\Users\file.exe