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/

6voto

Dweia Points 61

Si votre Windows est assez récent (comme la version 1809 ou plus récente), il y a un "vrai" curl disponible. curl a l'option de ligne de commande "-O" (lettre majuscule O ; la petite lettre ne fera pas la même chose !) L'option "-O", ou alternativement "--remote-name" indique à curl, que le fichier sauvegardé obtient le même nom que la partie nom de fichier de l'URL.

Il faut le démarrer sous le nom de "curl.exe", pour le distinguer de l'alias "curl" pour "Invoke-WebRequest". Par ailleurs, cela fonctionne dans cmd.exe sans changement.

En utilisant le même exemple que dans une autre réponse ici

curl.exe -O http://demo.mediacore.tv/files/31266.mp4

(Le site ne me permet pas d'ajouter ce commentaire, car j'ai apparemment besoin d'une plus grande "réputation" pour cela - il s'agit donc d'une nouvelle réponse).

4voto

Amos Points 166

Voici une fonction PowerShell qui résout les URL courtes avant de télécharger le fichier

function Get-FileFromUri {  
    param(  
        [parameter(Mandatory=$true, Position=0, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
        [string]
        [Alias('Uri')]
        $Url,
        [parameter(Mandatory=$false, Position=1)]
        [string]
        [Alias('Folder')]
        $FolderPath
    )
    process {
        try {
            # resolve short URLs
            $req = [System.Net.HttpWebRequest]::Create($Url)
            $req.Method = "HEAD"
            $response = $req.GetResponse()
            $fUri = $response.ResponseUri
            $filename = [System.IO.Path]::GetFileName($fUri.LocalPath);
            $response.Close()
            # download file
            $destination = (Get-Item -Path ".\" -Verbose).FullName
            if ($FolderPath) { $destination = $FolderPath }
            if ($destination.EndsWith('\')) {
                $destination += $filename
            } else {
                $destination += '\' + $filename
            }
            $webclient = New-Object System.Net.webclient
            $webclient.downloadfile($fUri.AbsoluteUri, $destination)
            write-host -ForegroundColor DarkGreen "downloaded '$($fUri.AbsoluteUri)' to '$($destination)'"
        } catch {
            write-host -ForegroundColor DarkRed $_.Exception.Message
        }  
    }  
}  

Utilisez-le comme ceci pour télécharger le fichier dans le dossier actuel :

Get-FileFromUri http://example.com/url/of/example/file  

Ou pour télécharger le fichier dans un dossier spécifié :

Get-FileFromUri http://example.com/url/of/example/file  C:\example-folder

2voto

Paul Moore Points 575

La fonction suivante permet d'obtenir une URL.

function Get-URLContent ($url, $path) {
  if (!$path) {
      $path = Join-Path $pwd.Path ([URI]$url).Segments[-1]
  }
  $wc = New-Object Net.WebClient
  $wc.UseDefaultCredentials = $true
  $wc.Proxy.Credentials = $wc.Credentials
  $wc.DownloadFile($url, $path)
}

Quelques commentaires :

  1. Les 4 dernières lignes ne sont nécessaires que si vous êtes derrière un proxy d'authentification. Pour une utilisation simple, (New-Object Net.WebClient).DownloadFile($url, $path) fonctionne bien.
  2. Le chemin doit doivent être absolus, car le téléchargement n'est pas effectué dans votre répertoire actuel. Les chemins relatifs feront en sorte que le téléchargement se perde quelque part.
  3. Le site if (!$path) {...} gère le cas simple où vous voulez simplement télécharger le fichier dans le répertoire actuel en utilisant le nom donné dans l'URL.

1voto

Miloud Eloumri Points 111

Utilisez Windows 10 bash Shell qui inclut wget une fois que la fonctionnalité Windows est configurée.

Comment installer Ubuntu bash Shell sur Windows :

YouTube : Exécuter Bash sur Ubuntu sous Windows !

Documentation sur le sous-système Windows pour Linux

0voto

Zimba Points 753

Invoke-WebRequest avec le paramètre -outfile s'attend à une chaîne de caractères, donc si votre nom de fichier commence par un nombre, et n'est pas entre guillemets, aucun fichier de sortie n'est créé.

eg. Invoke-WebRequest -Uri "[http://www.google.com/](http://www.google.com/)" -outfile "2.pdf"

Cela n'affecte pas les noms de fichiers commençant par une lettre.

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