Anlage des Repos
This commit is contained in:
28
examples/PowerShell/copy_webdav.ps1
Normal file
28
examples/PowerShell/copy_webdav.ps1
Normal file
@@ -0,0 +1,28 @@
|
||||
$REMOTE='https://webdav.example.com/';
|
||||
$REMOTEFOLDER = 'folder';
|
||||
$USERNAME = '';
|
||||
$PASSWORD = '';
|
||||
|
||||
# Define custom auth header
|
||||
$authH = @{Authorization='Basic {0}' -f [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("${USERNAME}:${PASSWORD}")))};
|
||||
|
||||
# Define custom WebRequest function to allow WebDav-Methods PROPFIND and MKCOL
|
||||
# With PowerShell 6 use "Invoke-RestMethod -CustomMethod" instead
|
||||
function Invoke-CustomRequest($Method, $Url){
|
||||
$req = [net.webrequest]::create($Url);
|
||||
$req.Headers['Authorization'] = $authH.Authorization;
|
||||
$req.Headers['Depth'] = '1';
|
||||
$req.Method = $Method;
|
||||
$reader = [System.IO.StreamReader]::new($req.GetResponse().GetResponseStream());
|
||||
$props = $reader.ReadToEnd();
|
||||
return $props;
|
||||
}
|
||||
|
||||
# Clean up all files on remote: List all files on root (PROPFIND), XPath to find hrefs then call DELETE for each
|
||||
Invoke-CustomRequest -Method 'PROPFIND' -Url $REMOTE/$REMOTEFOLDER/ | Select-Xml -XPath "//*[local-name()='href']" | % { $_.Node.'#text' } | % { Invoke-CustomRequest -Method "DELETE" -Url "$REMOTE/$_" }
|
||||
|
||||
# Create all directories: find all directories with relative paths and call MKCOL to create on remote
|
||||
Get-ChildItem -Directory -Recurse | % {$_.FullName | Resolve-Path -Relative} | % { Invoke-CustomRequest -Method "MKCOL" -Url "{0}/{1}" -f $REMOTE,$_ -Replace '\\','/' }
|
||||
|
||||
# Copy all files: find all files with relative paths then call PUT
|
||||
Get-ChildItem -File -Recurse | % {$_.FullName | Resolve-Path -Relative} | % { Invoke-WebRequest -Method "PUT" -Headers $authH -Infile $_ "{0}/{1}" -f $REMOTE,$_ -Replace '\\','/' }
|
||||
Reference in New Issue
Block a user