none
Powershell überprüfen ob Download File existiert. RRS feed

  • Frage

  • Hallo

    Mein Script lädt eine SQL-DB Backup File aus dem WEB herunter und importiert diesen in einen SQL-Server.

    Funktioniert auch soweit.

    Das Script starte ich per Taskplaner jeden Abend um 20:00Uhr nur manchmal ist das Download File noch nicht auf dem Webserver verfügbar, gibt es eine Möglichkeit dies per PS zu überprüfen, oder das er den Download alle ca 10min erneut startet ?

    $date = Get-Date -Format yyyy_MM_dd
    $file = "test_$date.bacpac"
    $Username = "test"
    $Password = "kennwort"
    $Url = "https://download.com/file/"
    $Path = "c:\test\$file"
    
    Write-Host "Start" -ForegroundColor Green
    Get-Date
    
    Write-Host "#################################################################################" -ForegroundColor Green
    Write-Host ""
    Write-Host "Auflisten des vorhanden Datenbank Backup" -ForegroundColor Green
    
        Get-Item C:\test\*
    
    Write-Host ""
    Write-Host "#################################################################################" -ForegroundColor Green
    Write-Host ""
    Write-Host "Altes Datenbank Backup wird gelöscht" -ForegroundColor Green
    
        Remove-Item C:\test\*
    
    Write-Host ""
    Write-Host "#################################################################################" -ForegroundColor Green
    Write-Host ""
    
    $WebClient = New-Object System.Net.WebClient
    $WebClient.Credentials = New-Object System.Net.Networkcredential($Username, $Password)
    
    Write-Host "Downloading" $Url, $file -ForegroundColor Green
    
            $WebClient.DownloadFile( $url, $path )
    
    Write-Host ""
    
    Get-Item C:\test\*
    
    
    
    Write-Host ""
    Write-Host "#################################################################################" -ForegroundColor Green
    Write-Host ""
    Write-Host "Alte Datenbank wird gelöscht"
    
    SQLPS\Invoke-Sqlcmd -HostName SQL2016Server -Query "Drop database Test_DB"
    
    Write-Host ""
    Write-Host "#################################################################################" -ForegroundColor Green
    
    Get-Date
    Write-Host ""
    Write-Host "Datenbank $Path wird importiert" -ForegroundColor Green
    Write-Host ""
    
    & "C:\Program Files (x86)\Microsoft SQL Server\130\DAC\bin\sqlPackage.exe" /a:Import /sf:$Path /p:CommandTimeout=0 /tdn:Test_DB /tsn:SQL2016Server
    Write-Host""
    
    Get-Date
    
    

    Dienstag, 31. Januar 2017 12:21

Antworten

  • Hallo,

    zunächst einmal: Du hättest uns nicht unbedingt alle Write-Host präsentieren müssen, die du in deinem Skript hast. Das macht es nicht gerade übersichtlich.

    Prinzipiell sollte die DownloadFile()-Methode einen Fehler zurückgeben, wenn die Datei noch nicht vorhanden ist. Dies kannst du in einer Try-Catch-Umgebung abfangen:

    $weiter = $false
    While(-not $weiter)
    {
        Try
        {
            $WebClient.DownloadFile( $url, $path )
            $weiter = $true
        }
        Catch
        {
            $weiter = $false
            Start-Sleep -Seconds 600
        }
    }

    Viele Grüße

    Christoph

    Dienstag, 31. Januar 2017 13:40

Alle Antworten

  • Hallo,

    zunächst einmal: Du hättest uns nicht unbedingt alle Write-Host präsentieren müssen, die du in deinem Skript hast. Das macht es nicht gerade übersichtlich.

    Prinzipiell sollte die DownloadFile()-Methode einen Fehler zurückgeben, wenn die Datei noch nicht vorhanden ist. Dies kannst du in einer Try-Catch-Umgebung abfangen:

    $weiter = $false
    While(-not $weiter)
    {
        Try
        {
            $WebClient.DownloadFile( $url, $path )
            $weiter = $true
        }
        Catch
        {
            $weiter = $false
            Start-Sleep -Seconds 600
        }
    }

    Viele Grüße

    Christoph

    Dienstag, 31. Januar 2017 13:40
  • PS: In Write-Host kannst du einen Zeilenumbruch mit "`n" erzeugen. Dann brauchst du dafür nicht ganz so viele Zeichen. Einmal abgesehen davon, dass ein gut geschriebenes Skript nicht so übermäßig mit Write-Host zugebombt ist.

    Dienstag, 31. Januar 2017 13:42
  • Ergänzend würde ich davon abraten, die alte Datenbank zu löschen bevor die neue irgendwie auf Vollständigkeit des Downloads und -wenn möglich- auf Konsistenz geprüft hast. 

     

    Grüße, Denniver
     


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Dienstag, 31. Januar 2017 15:40
    Moderator
  • Außerdem fällt mir noch ein: Man kann Strings und Zeichen multiplizieren und muss sein Skript nicht mit ewig-langen Ketten aus # verunstalten.

    Write-Host ("#"*30) -ForegroundColor Green


    • Bearbeitet hpotsirhc Mittwoch, 1. Februar 2017 11:07
    Mittwoch, 1. Februar 2017 11:06
  • Danke so klappt es mit dem Download.

    Den Befehl Write-Host habe ich durch "Echo" ersetzt.

    Danke

    Mittwoch, 8. Februar 2017 08:39