Wget-Pedant: HTTP-Download in PowerShell


    Tags: ,

    Unix-Fans kennen das Wget-Kommando, das mit einem Aufruf den Inhalt einer Webseite herunterladen kann. Ein direktes Pendant gibt es bei der PowerShell nicht, aber wer in der Suchmaschine die Worte "Wget PowerShell" eingibt wird schnell fündig. Die meisten Lösungen basieren auf der WebClient-Klasse im Namespace System.Net, die sich sehr einfach ansprechen lässt.

    Die im Folgenden vorgestellte function bietet auch die Möglichkeit, die Anmeldeinformation für einen Webproxy anzugeben. Dazu muss nur der Parameter -UseProxy angegeben werden.

    <#
     .Synopsis
     PowerShell-Pendant für Wget
    #>

    function Get-WebFile
    {
    param([String]$Url,[Switch]$UseProxy)

    if ($UseProxy)
    {
    $WebProxy = New-Object -Typename System.Net.WebProxy
    # Anmeldeinformation holen
    $Cred = Get-Credential
    $WebProxy.Credentials = $Cred.GetNetworkCredential()
    }

    # WebClient-Objekt anlegen
    $WC = New-Object -TypeName System.Net.WebClient

    try
    {
    # Ist ein Proxy im Spiel?
    if ($WebProxy -ne $null)
    {
    $WC.Proxy = $WebProxy
    }
    # Datei herunterladen
    $WC.DownloadString($Url)
    }
    catch
    {
    Write-Warning "Fehler beim Download ($_)"
    }
    }

    Um die Function, deren Name der Verb-Haupt-Konvention folgt, etwas einfacher aufrufen zu können, wird ein Alias angelegt:

    # Alias für Funktion setzen
    Set-Alias -Name WGet -Value Get-WebFile

    Der Aufruf sieht danach aus wie unter Unix:

    wget https://www.windowspro.de


    PS: Grundsätzlich ist es natürlich möglich, die Adresse und Portnummer eines Proxy anzugeben. Diese müssten als weitere Angaben (Konstruktor) beim Anlegen des neuen WebProxy-Objekts folgen:

     $WebProxy = New-Object -Typename System.Net.WebProxy "Proxy-Adresse", Portnummer

     

    Keine Kommentare