343 votes

Alternative native à wget dans Windows PowerShell ?

Je sais que je peux télécharger et installer la bibliothèque mentionnée ci-dessus (wget pour Windows), mais ma question est la suivante :

Dans Windows PowerShell, existe-t-il une alternative native pour wget ?

J'ai besoin wget simplement pour récupérer un fichier à partir d'une URL donnée avec HTTP GET. Par exemple :

wget http://www.google.com/

311voto

Sean Bannister Points 731

Voici une solution simple pour les versions PS 3.0 et ultérieures qui fonctionne et qui n'implique pas beaucoup de vomi PS :

wget http://blog.stackexchange.com/ -OutFile out.html

Notez que :

  • wget est un alias pour Invoke-WebRequest

  • Invoke-WebRequest renvoie un HtmlWebResponseObject qui contient de nombreuses propriétés d'analyse HTML utiles, telles que des liens, des images, des formulaires, des champs d'entrée, etc., mais dans ce cas, nous utilisons simplement le contenu brut.

  • Le contenu du fichier est stocké en mémoire avant d'être écrit sur le disque, ce qui rend cette approche inadaptée au téléchargement de fichiers volumineux.

  • Sur les installations Windows Server Core, vous devrez écrire ceci comme suit

    wget http://blog.stackexchange.com/ -UseBasicParsing -OutFile out.html
  • Avant le 20 septembre 2014, j'ai suggéré

    (wget http://blog.stackexchange.com/).Content >out.html

    comme réponse.  Cependant, cela ne fonctionne pas dans tous les cas, car la réponse de la > (qui est un alias de Out-File ) convertit l'entrée en Unicode.

Si vous utilisez Windows 7, vous devez installer la version 4 ou une version plus récente du Windows Management Framework.

Vous pouvez trouver que faire un $ProgressPreference = "silentlyContinue" avant Invoke-WebRequest améliorera de manière significative la vitesse de téléchargement des gros fichiers ; cette variable contrôle si l'interface utilisateur de progression est rendue.

195voto

alsemyonov Points 691

Si vous avez juste besoin de récupérer un fichier, vous pouvez utiliser la fonction Télécharger le fichier de la méthode WebClient objeto:

$client = New-Object System.Net.WebClient
$client.DownloadFile($url, $path)

$url est une chaîne représentant l'URL du fichier, et $path représente le chemin local vers lequel le fichier sera enregistré.

Notez que $path doit inclure le nom du fichier ; il ne peut s'agir d'un simple répertoire.

101voto

user4514 Points 1282

Il y a Invoke-WebRequest dans la prochaine version 3 de PowerShell :

Invoke-WebRequest http://www.google.com/ -OutFile c:\google.html

20voto

Oli Points 123

C'est un peu désordonné mais il y a cet article de blog qui vous donne les instructions pour télécharger les fichiers.

Vous pouvez également (et c'est celle que je recommande) utiliser le BITS :

Import-Module BitsTransfer
Start-BitsTransfer -source "http://urlToDownload"

Il affichera la progression et téléchargera le fichier dans le répertoire actuel.

8voto

eyecatchUp Points 185

PowerShell V4 One-liner :

(iwr http://blog.stackexchange.com/).Content >index.html`

ou

(iwr http://demo.mediacore.tv/files/31266.mp4).Content >video.mp4

C'est en gros Le (génial) one-liner V3 de Warren (merci pour cela !) - avec juste un petit changement afin de le faire fonctionner dans un PowerShell V4.

La phrase de Warren - qui utilise simplement wget plutôt que iwr - devrait toujours fonctionner pour V3 (Du moins, je le suppose ; je ne l'ai pas testé, cependant). Quoi qu'il en soit. Mais en essayant de l'exécuter dans un V4 PowerShell (comme j'ai essayé), vous verrez que PowerShell échoue à résoudre wget comme un cmdlet/programme valide.

Pour ceux qui sont intéressés, il s'agit - comme je l'ai appris de Commentaire de Bob en réponse à la réponse acceptée (merci, mec !) - parce que à partir de PowerShell V4, wget y curl sont aliasés en Invoke-WebRequest fixé à iwr par défaut . Ainsi, wget ne peut être résolu (ainsi que curl ne peut pas fonctionner ici) .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X