42 lines
1.7 KiB
PowerShell
42 lines
1.7 KiB
PowerShell
# Requires WebClient object $webClient defined, e.g. $webClient = New-Object System.Net.WebClient
|
|
#
|
|
# Parameters:
|
|
# $source - The url of folder to copy, with trailing /, e.g. http://website/folder/structure/
|
|
# $destination - The folder to copy $source to, with trailing \ e.g. D:\CopyOfStructure\
|
|
# $recursive - True if subfolders of $source are also to be copied or False to ignore subfolders
|
|
|
|
Function Copy-Folder([string]$source, [string]$destination, [bool]$recursive) {
|
|
if (!$(Test-Path($destination))) {
|
|
New-Item $destination -type directory -Force
|
|
}
|
|
|
|
# Get the file list from the web page
|
|
$webString = $webClient.DownloadString($source)
|
|
$lines = [Regex]::Split($webString, "<br>")
|
|
# Parse each line, looking for files and folders
|
|
foreach ($line in $lines) {
|
|
if ($line.ToUpper().Contains("HREF")) {
|
|
# File or Folder
|
|
if (!$line.ToUpper().Contains("[TO PARENT DIRECTORY]")) {
|
|
# Not Parent Folder entry
|
|
$items = [Regex]::Split($line, """")
|
|
$items = [Regex]::Split($items[2], "(>|<)")
|
|
$item = $items[2]
|
|
if ($line.ToLower().Contains("<dir>")) {
|
|
# Folder
|
|
if ($recursive) {
|
|
# Subfolder copy required
|
|
Copy-Folder "$source$item/" "$destination$item/" $recursive
|
|
}
|
|
else {
|
|
# Subfolder copy not required
|
|
}
|
|
}
|
|
else {
|
|
# File
|
|
$webClient.DownloadFile("$source$item", "$destination$item")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |