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, ich habe den "Einzeiler" etwas lesbarer strukturiert:
$Reg="HKLM:\SYSTEM\CurrentControlSet\Services\WebClient\Parameters"
$RegItem="FileSizeLimitInBytes"
$Value="4294967295"

Set-ItemProperty -Type DWord -Path $Reg -Name $RegItem -value $Value

get-Item -path $Reg|get-ItemProperty
Nach der Anpassung in der Registry muss der WebClient Dienst neu gestartet werden.
Restart-Service WebClient

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

Hier ein Beispiel mit dem Umgang 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 Script sofort beendet. Ansonsten wird das Laufwerk einfach verbunden.
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":\") {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
    }

#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

#Netzlaufwerk löschen
#Remove-PSDrive -name $Drive

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