Datei von Website herunterladen mit Loginabfrage
Hallo,
ich versuche gerade eine Batchdatei zu schreiben mit der ich eine Datei von einer Website runterladen kann. Es erfolgt vorher eine Benutzer und Passwort Abfrage.
Folgendes Skript gibt aber folgende Fehler aus:
Die Logdatei wird dabei folgendes aus:
Ich konnte jetzt leider keine Antwort auf mein Problem finden und hoffe das mir hier jemand einen Tip geben kann woran es liegt. Die URL müsste doch stimmen oder was versteht man hier unter Server oder Proxy :S
Der Befehlt SetCredentials scheint halt Probleme zu haben, aber ich kommt nicht auf die Lösung.
Vielen Dank im Voraus
MfG
Patrick
ich versuche gerade eine Batchdatei zu schreiben mit der ich eine Datei von einer Website runterladen kann. Es erfolgt vorher eine Benutzer und Passwort Abfrage.
Folgendes Skript gibt aber folgende Fehler aus:
@echo off
set LOGFILE=batch_download_TopQW.log
call :LOG > %LOGFILE%
exit /B
:LOG
bitsadmin /Create DownloadDumpData6
bitsadmin /SetCredentials DownloadDumpData6 https://1.1.1.1/prosozXML/60_Parchim/ BASIC BENUTZERNAME PASSWORT
bitsadmin /addfile DownloadDumpData6 https://1.1.1.1/prosozXML/60_Parchim/Export.xml Export.xml
bitsadmin /SetPriority DownloadDumpData6 "FOREGROUND"
bitsadmin /Resume DownloadDumpData6
:WAIT_DUMP_DATA_DOWNLOAD_LOOP_START
call bitsadmin /info DownloadDumpData6 /verbose | find "STATE: TRANSFERRED"
if %ERRORLEVEL% equ 0 goto WAIT_DUMP_DATA_DOWNLOAD_LOOP_END
call bitsadmin /RawReturn /GetBytesTransferred DownloadDumpData6
timeout 2
goto WAIT_DUMP_DATA_DOWNLOAD_LOOP_START
:WAIT_DUMP_DATA_DOWNLOAD_LOOP_END
call bitsadmin /Complete DownloadDumpData6
Die Logdatei wird dabei folgendes aus:
BITSADMIN version 3.0
BITS administration utility.
(C) Copyright 2000-2006 Microsoft Corp.
BITSAdmin is deprecated and is not guaranteed to be available in future versions of Windows.
Administrative tools for the BITS service are now provided by BITS PowerShell cmdlets.
**Created job {36E28061-1EC7-4070-AB50-0F4D99A1DE19}.**
BITSADMIN version 3.0
BITS administration utility.
(C) Copyright 2000-2006 Microsoft Corp.
BITSAdmin is deprecated and is not guaranteed to be available in future versions of Windows.
Administrative tools for the BITS service are now provided by BITS PowerShell cmdlets.
**'https://1.1.1.1/prosozXML/60_Parchim/' is not a valid credential target. It must be 'proxy' or 'server'.**
BITSADMIN version 3.0
BITS administration utility.
(C) Copyright 2000-2006 Microsoft Corp.
BITSAdmin is deprecated and is not guaranteed to be available in future versions of Windows.
Administrative tools for the BITS service are now provided by BITS PowerShell cmdlets.
**Unable to add file to job - 0x80070057
Falscher Parameter.**
BITSADMIN version 3.0
BITS administration utility.
(C) Copyright 2000-2006 Microsoft Corp.
BITSAdmin is deprecated and is not guaranteed to be available in future versions of Windows.
Administrative tools for the BITS service are now provided by BITS PowerShell cmdlets.
**Priority set to FOREGROUND.**
BITSADMIN version 3.0
BITS administration utility.
(C) Copyright 2000-2006 Microsoft Corp.
BITSAdmin is deprecated and is not guaranteed to be available in future versions of Windows.
Administrative tools for the BITS service are now provided by BITS PowerShell cmdlets.
**Unable to resume job - 0x80200003**
**Dieser Auftrag hat keine Dateien. Fgen Sie dem Auftrag Dateien an, und wiederholen Sie den Vorgang.**
0
Gewartet wird 2 Sekunden. Weiter mit beliebiger Taste...10
0
Gewartet wird 2 Sekunden. Weiter mit beliebiger Taste...
Ich konnte jetzt leider keine Antwort auf mein Problem finden und hoffe das mir hier jemand einen Tip geben kann woran es liegt. Die URL müsste doch stimmen oder was versteht man hier unter Server oder Proxy :S
Der Befehlt SetCredentials scheint halt Probleme zu haben, aber ich kommt nicht auf die Lösung.
Vielen Dank im Voraus
MfG
Patrick
Please also mark the comments that contributed to the solution of the article
Content-Key: 400396
Url: https://administrator.de/contentid/400396
Printed on: April 23, 2024 at 16:04 o'clock
21 Comments
Latest comment
Moin,
das Tool ist rund 10 Jahre alt und die Lösung ist auf BITS PowerShell cmdlets umzusteigen, bevor Du hier Stunden in ein uralt Tool investiert.
Gruss
Zitat von @Pat.bat:
(C) Copyright 2000-2006 Microsoft Corp.
BITSAdmin is deprecated and is not guaranteed to be available in future versions of Windows.
Administrative tools for the BITS service are now provided by BITS PowerShell cmdlets.
(C) Copyright 2000-2006 Microsoft Corp.
BITSAdmin is deprecated and is not guaranteed to be available in future versions of Windows.
Administrative tools for the BITS service are now provided by BITS PowerShell cmdlets.
das Tool ist rund 10 Jahre alt und die Lösung ist auf BITS PowerShell cmdlets umzusteigen, bevor Du hier Stunden in ein uralt Tool investiert.
Gruss
Man könnte es in PowerShell so machen:
Ansonsten niemals Plaintext Passwörter in Skripten speichern!
Hier eine methode wie du die Windows eigene API nutzen kannst um PWs sicher in skripten zu hinterlegen:
https://www.pdq.com/blog/secure-password-with-powershell-encrypting-cred ...
$Link = "http://deine.domain/pfad/zur/datei.xml"
$Username = "hier_login_eintragen"
$Passwort = "hier_dein_passwort_eintragen" | ConvertTo-SecureString -asPlainText -Force
$Zugangsdaten = New-Object System.Management.Automation.PSCredential($Username, $Passwort)
$XML = (Invoke-Webrequest -Uri $Link -Credential $Zugangsdaten).content
$XML | New-Item -Type File -Name Download.xml
Ansonsten niemals Plaintext Passwörter in Skripten speichern!
Hier eine methode wie du die Windows eigene API nutzen kannst um PWs sicher in skripten zu hinterlegen:
https://www.pdq.com/blog/secure-password-with-powershell-encrypting-cred ...
Der Proxy ist entweder Systemweit eingetragen ("Internetoptionen" in Windows) oder direkt in Firefox (Einstellungen / Verbindungseinstellungen)
Sobald du die IP + Port vom Proxy hast:
Sobald du die IP + Port vom Proxy hast:
$Link = "http://deine.domain/pfad/zur/datei.xml"
$Username = "hier_login_eintragen"
$Passwort = "hier_dein_passwort_eintragen" | ConvertTo-SecureString -asPlainText -Force
$Zugangsdaten = New-Object System.Management.Automation.PSCredential($Username, $Passwort)
$ProxyUsername = "hier_den_proxy_usernamen"
$ProxyPW = "hier_das_proxy_pw" | ConvertTo-SecureString -asPlainText -Force
$ProxyZugangsDaten = New-Object System.Management.Automation.PSCredential($ProxyUsername, $ProxyPW)
#Hier die IP + Port vom Proxy eintragen in der form IP:Port
$ProxyIP = "127.0.0.1:8080"
$XML = (Invoke-Webrequest -Uri $Link -Credential $Zugangsdaten -Proxy $ProxyIP -ProxyCredential $ProxyZugangsDaten).content
$XML | New-Item -Type File -Name Download.xml
Also wenn ich die Website aufrufe, dann kommt ein Popup und fragt nach Bernutzername und Passwort, bevor es dann weiter auf die eigentliche Seite geht.
Nur wenn das das Basic-Auth Popup des Browsers ist dann geht das oben genannte. Wenn es ein vorgeschaltetes Formular auf der Webseite oder "Digest Auth" ist, dann musst du die Daten an das Formular übergeben und dann abschicken. Geht auch mit PS aber dazu wäre dann mindestens der HTML-Quellcode der Einstiegsseite nötig um dir hier helfen zu können. Denn eine Webseite kann auf vielfältige Weise den User authentifizieren.Gruß l
Zitat von @Pat.bat:
ok also der Proxy wird in Firefox per Automatische Proxy-Konfigurations-Adresse vergeben.
Der Proxy wird mittels einer proxyconfig.pac ermittelt.
In dieser kann ich lediglich die IP+Proxy finden, aber kein Username oder Passwort. Ich bin mir jetzt nicht sicher wo ich dieses finden kann oder ob ich mir dieses direkt vom Dienstleister einholen muss.
@138721, ja es handelt sich um das Basic-Auth Popup des Browsers.
Gut dann verwendet das System vermutlich deine Windows-Credentialsok also der Proxy wird in Firefox per Automatische Proxy-Konfigurations-Adresse vergeben.
Der Proxy wird mittels einer proxyconfig.pac ermittelt.
In dieser kann ich lediglich die IP+Proxy finden, aber kein Username oder Passwort. Ich bin mir jetzt nicht sicher wo ich dieses finden kann oder ob ich mir dieses direkt vom Dienstleister einholen muss.
@138721, ja es handelt sich um das Basic-Auth Popup des Browsers.
Packe mal folgendes in den Kopf des Skripts:
(Proxy und Port natürlich anpassen-
$global:PSDefaultParameterValues = @{
'Invoke-RestMethod:Proxy'='http://myCorpProxy:8080'
'Invoke-WebRequest:Proxy'='http://myCorpProxy:8080'
'*:ProxyUseDefaultCredentials'=$true
}
Alternativ nutze den Parameter -ProxyUseDefaultCredentials anstelle des extra erstellten Credentials Objekt.
'1.1.1.1:8080'
Kein Wunder, du hast das Protokoll vor den IPs vergessen, richtig kopieren sollte man schon können.$global:PSDefaultParameterValues = @{
'Invoke-RestMethod:Proxy'='http://1.1.1.1:8080'
'Invoke-WebRequest:Proxy'='http://1.1.1.1:8080'
'*:ProxyUseDefaultCredentials'=$true
}
Dieser Vorgang wird für einen relativen URI nicht unterstützt.
Kein Problem, in dem Fall folgendes noch im Kopf des Skripts einfügen:
Denn der Server nutzt ein aktuelleres TLS Protokoll, deswegen kommt die Meldung, mit der Anpassung der verwendeten Protokolle wird das korrigiert.
Und den korrekten Domainnamen in der URL nutzen! Denn sonst passt das Zertifikat ja nicht.
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]'Tls11,Tls12'
Und den korrekten Domainnamen in der URL nutzen! Denn sonst passt das Zertifikat ja nicht.
So nun gibts eine Andere Meldung :D
Ich hab das Skript ja nicht verbrochen das war @NetzwerkDude . Hättest du direkt per PN angefragt hättest du von mir direkt und unkompliziert ein sofort funktionierendes Skript erhalten das wir zusammen direkt am Objekt entwickelt hätten. So bekommst du es halt Schritt für Schritt auf die harte Tour ;-P.
Du nutzt die falsche URL auf 1.1.1.1 passt der Common Name das Zertifikats nicht, nutze den korrekten Domainnamen.
Alternative "ignorieren von Zertifikatsfehlern":
Alternative "ignorieren von Zertifikatsfehlern":
Add-Type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}
}
"@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
Prüfe auf der Seite in den Seiteninformationen welches SSL Protokoll sie nutzt. Nutzt das Teil vielleicht noch das vollkommen veraltete SSL3 (in dem Fall dringend Update des Servers durchführen!)?? Wenn ja dann füge das bei den Protokollen in der Liste oben hinzu.
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]'SSL3,Tls,Tls11,Tls12'
Zitat von @Pat.bat:
Jetzt muss ich nur noch hinkriegen das er das Teil woanders ablegt als in meinem Benutzerprofil und dann kann ich weitermachen mit dem verarbeiten.
Den Pfad in der letzten Zeile anpassen, sollte doch auch von einem Powershell-Anfänger in 10 Sekunden machbar sein.Jetzt muss ich nur noch hinkriegen das er das Teil woanders ablegt als in meinem Benutzerprofil und dann kann ich weitermachen mit dem verarbeiten.
Offtopic: kann ich eigentlich meine batch .bat durch powershell ersetzen oder hat .bat noch seine Darseinsberechtigung?
Joa, kannst du selbst verständlich.Batch hat dort seine Daseinsberechtigung wo die PS nicht genutzten werden kann/darf or whatever. Heutzutage gibt es aber keinen großartigen Grund mehr Batch zu nutzen, die PS kann all das was Batch kann und noch wesentlich mehr, da objektorientiert etc. pp.