Donnerstag, 4. Januar 2018

WebDAV unter Windows

Auf jedem Windows Client System ist ein WebDAV Client implementiert. Damit ist der Zugriff auf WebDAV basierte Cloudspeicher ziemlich einfach. In der Powershell relativ leicht zu kontrollieren:
get-service WebClient
Man kann entweder im Explorer unter "Dieser PC / Netzwerkadresse hinzufügen" einfach die WebDAV Adresse des Cloudspeichers (z.B. https://webdav.magentacloud.de) eingeben und wird nach dem Benutzerkonto gefragt.

Verbinden per Script

Man kann in der cmd Box ein Laufwerk mit dem guten alten net use Befehl verbinden:
net use Z: https://webdav.magentacloud.de /user:<user> <passwort>
Man beachte die Ausgabe, wenn man sich das Ergebnis dann mit net use anschaut :
Status       Lokal     Remote                    Netzwerk

-------------------------------------------------------------------------------
             Z:        \\webdav.magentacloud.de@SSL\DavWWWRoot
                                                Web Client Network

Die Webadresse wird anders dargestellt, das ist wichtig, wenn man die Verbindung mit Powershell erstellen will. Das cmdlet New-PSDrive braucht genau diese Schreibweise und akzeptiert die übliche https:// Darstellung nicht!
New-PSDrive -Name Z -Root \\webdav.magentacloud.de@SSL\DavWWWRoot -PSProvider FileSystem -Credential <user>
Das cmd-let akzeptiert auch kein Klartext Passwort als Übergabe, hier muss man zum PSCredential object greifen.
Vorteil: Man kann das Passwort verschlüsselt auf dem Computer speichern. Es ist nur auf diesem Computer lesbar und nicht kopierbar.

Hürden & Tücken

Laufwerk verbunden und einfach so beliebige Dateien kopieren - nicht bei Microsoft!?! Ist die Datei mal größer erhält man die Ausschrift: "Die Dateigröße überschreitet die maximal zulässige Größe" Und wie das so ist mit den Fehlermeldungen, man liest die Datei aus dem Netz und man bekommt aber die Ausschrift: "kann nicht gespeichert werden".

Größenbeschränkung

Microsoft hat die Dateigröße für den WebDAV Client auf 50000000 Byte dezimal beschränkt. Die maximale Dateigröße für WebDAV liegt bei 4 GByte ( 4.294.967.295 Byte dezimal).
Diesen Wert kann man in Powershell anzeigen bzw. setzen. Nach der Anpassung in der Registry muss der WebClient Dienst neu gestartet werden - ich habe alle notwendigen Befehle gleich in ein kleines Script gepackt.
# WebClient FileSizeLimitInBytes ueberpruefen und setzen
$Reg="HKLM:\SYSTEM\CurrentControlSet\Services\WebClient\Parameters"
$RegItem="FileSizeLimitInBytes"
$Value="4294967295"

$WebClient = get-Item -path $Reg|get-ItemProperty
Write-Verbose ("Die maximale FileSize WebDav ist derzeit: " + $WebClient.FileSizeLimitInBytes + " byte")

if (-not ($WebClient.FileSizeLimitInBytes -eq $Value)){
  Set-ItemProperty -Type DWord -Path $Reg -Name $RegItem -value $Value
  Write-Verbose ("FileSize WebDav auf $Value gesetzt")
  Restart-Service WebClient
  Write-Verbose "WebClient neu gestartet"
}

Windows Server 

Der WebDAV Client ist auf der Server Version nicht installiert. Man bekommt ihn für Windows Server 2008/2012 mit der Installation des Features desktop experience.
Install-WindowsFeature Desktop-Experience
Beim Windows Server 2016 gibt es einen separaten Client.(das muss ich noch untersuchen) Quelle
Install-WindowsFeature WebDAV-Redirector –Restart

Etwas mehr Code

Noch ein Beispiel für den Umgang mit der WebDAV Schnittstelle. Das Script fragt beim ersten Aufruf das Passwort des Benutzer Kontos ab und speichert dieses. Wenn der Laufwerksbuchstabe schon existiert wird das Laufwerk gelöscht und das Script sofort beendet. Ansonsten wird das Laufwerk einfach verbunden. Man kann das Script also einfach zum Verbinden oder zum Löschen aufrufen.
Set-Location $PSScriptRoot
$UserName= "User Name"
$PWDFile=".\PASSWORD.txt"
$Drive="t"
$Share="\\sd2dav.1und1.de@SSL\DavWWWRootd"

#Testen ob Laufwerk schon existiert
If (test-path $Drive":\") {
    #Netzlaufwerk löschen
    Remove-PSDrive -name $Drive
    Write-verbose "Laufwerk $Drive entfernt"
    exit
    }

#Wenn Passwort nicht gespeichert vorhanden passwort abfragen und File erzeugen
If (-not (test-path $PWDFile)) { 
    $credential = Get-Credential -Credential $UserName
    $credential.Password | ConvertFrom-SecureString | Set-Content $PWDFile
    Write-Verbose "fehlendes PWD File fuer User $UserName erzeugt"
    }

#Credential aus Passwort Datei und Username erzeugen
$encrypted = Get-Content $PWDFile | ConvertTo-SecureString
$credential = New-Object System.Management.Automation.PsCredential($UserName, $encrypted)

#Netzlaufwerk verbinden
New-PSDrive -Name $Drive -Root $Share -PSProvider FileSystem -Credential $credential
Write-Verbose "Laufwerk $Drive zu Share $Share verbunden"

WebDAV als Transportmedium

So ein Cloud Speicher lässt sich ganz gut als Transportmedium verwenden. Man kopiert an einer Lokation Daten "in die Cloud" und an einer anderen Lokation holt man sie wieder "heraus". Ich habe hier ein gutes Script gefunden um Daten mit Powershell in Ordnern zu synchronisieren.

Keine Kommentare:

Kommentar veröffentlichen