Je sais que je peux télécharger et installer la bibliothèque susmentionnée (wget pour Windows), mais ma question est la suivante:
Dans Windows PowerShell, existe-t-il une alternative native à wget
?
J'ai wget
simplement besoin de récupérer un fichier depuis une URL donnée avec HTTP GET. Par exemple:
wget http://www.google.com/
Réponses:
Voici un simple PS 3.0 et plus récent one-liner qui fonctionne et qui implique peu de PS:
Notez que:
wget
est un alias pourInvoke-WebRequest
Sur les installations Windows Server Core, vous devez écrire ceci sous la forme suivante:
Avant le 20 septembre 2014, j'ai suggéré
comme une réponse. Cependant, cela ne fonctionne pas dans tous les cas, car l'
>
opérateur (qui est un alias pourOut-File
) convertit l'entrée en Unicode.Si vous utilisez Windows 7, vous devrez installer la version 4 ou plus récente de Windows Management Framework.
Vous constaterez peut-être que le fait d’
$ProgressPreference = "silentlyContinue"
avantInvoke-WebRequest
améliorera considérablement la vitesse de téléchargement des gros fichiers; cette variable contrôle si l'interface utilisateur de progression est rendue.la source
Si vous avez juste besoin de récupérer un fichier, vous pouvez utiliser la méthode DownloadFile de l' objet WebClient :
Où
$url
est une chaîne représentant l'URL du fichier et$path
le chemin d'accès local dans lequel le fichier sera enregistré.Notez que
$path
doit inclure le nom du fichier; ce ne peut pas être juste un répertoire.la source
(new-object System.Net.WebClient).DownloadFile( '$url, $path)
c'est la meilleure correspondance quewget
j'ai vue jusqu'à présent. Merci!$client.DownloadFile( "http://blog.stackexchange.com/", "c:/temp2/_Download.html")
(new-object System.Net.WebClient).DownloadData($url) | Out-Null
Il y a
Invoke-WebRequest
dans la prochaine version de PowerShell 3:la source
dd
...-Outfile
paramètre semble étranger lorsque vous pouvez simplement utiliser>
(écraser) ou>>
(ajouter) à un fichier.wget
:)wget
etcurl
sont aliasted àInvoke-WebRequest
(iwr
) par défaut: DC'est un peu brouillon, mais il y a cet article de blog qui vous donne des instructions pour télécharger des fichiers.
Alternativement (et c'est celui que je recommanderais), vous pouvez utiliser BITS:
Il montrera la progression et téléchargera le fichier dans le répertoire actuel.
la source
Start-BitsTransfer : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
. Je suis perplexe: |PowerShell V4 One-Liner:
ou
Il s’agit essentiellement de V3 one-liner de Warren (génial) (merci pour cela!) - avec juste un changement minime afin de le faire fonctionner dans un V4 PowerShell.
Le one-liner de Warren - qui utilise simplement
wget
plutôt que deiwr
- devrait toujours fonctionner pour V3 (du moins, je suppose; je ne l’ai pas testé, cependant). En tous cas. Mais lorsque vous tentez de l'exécuter dans un PowerShell V4 (comme je l'ai essayé), vous verrez que PowerShell ne parvient pas à résoudre enwget
tant qu'applet de commande / programme valide.Pour les intéressés, c'est - comme je l' ai pris de commentaire de Bob en réponse à la réponse acceptée (merci, mec!) - parce que de PowerShell V4,
wget
etcurl
sont Données associéesInvoke-WebRequest
, mis àiwr
par défaut . Ainsi,wget
ne peut pas être résolu (ainsi quecurl
ne peut pas fonctionner ici) .la source
Voici une fonction PowerShell qui résout les URL courtes avant de télécharger le fichier.
Utilisez-le comme ceci pour télécharger le fichier dans le dossier actuel:
Ou pour télécharger le fichier dans un dossier spécifié:
la source
La fonction suivante obtiendra une URL.
Certains commentaires:
(New-Object Net.WebClient).DownloadFile($url, $path)
fonctionne bien.if (!$path) {...}
section traite le cas simple où vous souhaitez simplement télécharger le fichier dans le répertoire en cours en utilisant le nom indiqué dans l'URL.la source
Utilisez Windows 10 shell bash qui inclut wget une fois la fonctionnalité Windows configurée.
Comment installer le shell Ubuntu bash sous Windows:
YouTube: Lancer Bash sur Ubuntu sous Windows!
Documentation du sous-système Windows pour Linux
la source
Si votre Windows est suffisamment nouveau (comme la version 1809 ou plus récente), il existe une "vraie" boucle disponible. curl a l'option de ligne de commande "-O" (lettre majuscule O; une lettre minuscule ne fera pas de même!) même nom que la partie nom de fichier de l'URL.
Il faut commencer par "curl.exe" pour le distinguer de l'alias "curl" de "Invoke-WebRequest". Incidemment, cela fonctionne dans cmd.exe sans modifications.
En utilisant le même exemple que dans une autre réponse ici
(Le site ne me permet pas d'ajouter ceci en tant que commentaire, car j'ai apparemment besoin de plus de "réputation" pour cela - donc cela donne une nouvelle réponse)
la source
Invoke-WebRequest avec le paramètre -outfile attend une chaîne. Ainsi, si votre nom de fichier commence par un nombre et n'est pas placé entre guillemets, aucun fichier de sortie n'est créé.
par exemple.
Invoke-WebRequest -Uri "http://www.google.com/" -outfile "2.pdf"
Cela n'affecte pas les noms de fichiers commençant par une lettre.
la source
wget
est un alias deInvoke-WebRequest
et un nom similaire à celui ci-dessus)Cela devrait fonctionner pour vous permettre de contourner les éléments non initialisés par le navigateur. Notez le paramètre "-UseBasicParsing".
la source
-UseBasicParsing
.