Benutzer mit den meisten Antworten
Powershell überprüfen ob Download File existiert.

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
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
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Dienstag, 31. Januar 2017 15:29
- Als Antwort markiert Denniver ReiningMVP, Moderator Donnerstag, 2. Februar 2017 03:37
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
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Dienstag, 31. Januar 2017 15:29
- Als Antwort markiert Denniver ReiningMVP, Moderator Donnerstag, 2. Februar 2017 03:37
-
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. -