19 votes

Télécharger un fichier via HTTP à partir d'un script sous Windows

Je veux un moyen de télécharger un fichier via HTTP à partir de son URL (similaire au fonctionnement de wget). J'ai vu les réponses à cette question mais j'ai deux modifications à apporter aux exigences :

  • J'aimerais qu'il fonctionne sous Windows 7 ou supérieur (mais s'il fonctionne sous Windows XP, c'est un bonus).
  • J'ai besoin de pouvoir faire cela sur une machine stockée avec rien d'autre que le script, qui devrait être un texte qui pourrait être facilement saisi sur un clavier ou copié/collé.
  • Plus c'est court, mieux c'est.

Donc, essentiellement, je voudrais un .cmd (batch) script, VBScript ou PowerShell script qui peut accomplir le téléchargement. Il pourrait utiliser COM ou d'invoquer Internet Explorer, mais il doit s'exécuter sans aucune entrée, et doit se comporter correctement lorsqu'il est invoqué sans affichage (comme par le biais d'un fichier Telnet session).

2voto

Zimba Points 753

Il existe un utilitaire (résidant avec CMD) sous Windows qui peut être exécuté à partir de CMD (si vous avez un accès en écriture) :

set url=https://www.nsa.org/content/hl-images/2017/02/09/NSA.jpg
set file=file.jpg
certutil -urlcache -split -f %url% %file%

Cmdlets dans Powershell :

$url = "https://www.nsa.org/content/hl-images/2017/02/09/NSA.jpg"
$file = "file.jpg"
$ProgressPreference = "SilentlyContinue";
Invoke-WebRequest -Uri $url -outfile $file

.Net sous PowerShell :

$url = "https://www.nsa.org/content/hl-images/2017/02/09/NSA.jpg"
$file = "file.jpg"
# Add the necessary .NET assembly
Add-Type -AssemblyName System.Net.Http
# Create the HttpClient object
$client = New-Object -TypeName System.Net.Http.Httpclient
$task = $client.GetAsync($url)
$task.wait();
[io.file]::WriteAllBytes($file, $task.Result.Content.ReadAsByteArrayAsync().Result)

Construction en ligne de commande C# avec csc.exe :

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/command-line-building-with-csc-exe

using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;

namespace DownloadImage
{
    class Program
    {
        static async Task Main(string[] args)
        {
            using var httpClient = new HttpClient();
            var url = "https://www.nsa.org/content/hl-images/2017/02/09/NSA.jpg";
            byte[] imageBytes = await httpClient.GetByteArrayAsync(url);
            using var fs = new FileStream("file.jpg", FileMode.Create);
            fs.Write(imageBytes, 0, imageBytes.Length);
        }
    }
}

Applications Windows intégrées. Pas besoin de téléchargements externes.

Testé sur Win 10

1voto

npocmaka Points 1141

Voici ma tentative de résumer les moyens de télécharger des fichiers sur Windows sans utiliser d'outils externes.

Il comprend BITSADMIN , Microsoft.XmlHTTP y WinHTTP avec un système hybride batch/ JScript script qui n'a pas besoin de fichiers temporaires, et System.Net.WebClinet avec JScript.NET hybride auto-compilé.

0voto

programmer365 Points 1

Cette technique est très souvent utilisée dans le piratage, télécharger un fichier en mémoire en utilisant Powershell :

powershell -nop -c "& {(New-Object System.Net.WebClient).DownloadString('URL')}"

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