# 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, "
") # 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") } } } } }