我正在尝试使用Powershell从我们的HTTP服务器复制目录文件夹,我想将它的全部内容(包括子文件夹)复制到我当前服务器的本地驱动器中。这一点是服务器部署自动化,以便我的老板可以运行我的powershell脚本并设置整个服务器,并将所有文件夹复制到其C:驱动器。这是我的代码
$source = "http://servername/serverupdates/deploy/Program%20Files/"
$destination = "C:\Program Files"
$client = new-object System.Net.WebClient
$client.DownloadFile($source, $destination)
当我在Powershell ISE中以管理员身份运行脚本时,收到错误消息
“使用”2“参数调用”DownloadFile“的异常:”WebClient请求期间发生异常。“
有关可能发生的事情的任何建议吗?
我也试过这段代码,但是当我运行它时没有任何反应,没有错误或任何东西。
$source = "http://serverName/serverupdates/deploy/Program%20Files/"
$webclient = New-Object system.net.webclient
$destination = "c:/users/administrator/desktop/test/"
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")
}
}
}
}
}
答案 0 :(得分:0)
System.Net.WebClient.DownloadFile
期望第二个参数是文件名,而不是目录。它无法递归下载目录,只能下载单个文件。
对于第二部分,逐行运行,看看会发生什么。但解析HTML以获取路径容易出错,并且是generally advised against。
我的建议:不要为此使用http。复制文件共享中的内容,它只有一行,为您省去了很多麻烦。如果必须使用http,请下载存档并将其解压缩到目标目录中。
答案 1 :(得分:0)
在@ Gerald Schneider的答案旁边,请注意,如果客户端进程不需要创建输出文件的权限,也会发生相同的 WebException 。
我建议您采取以下策略:
希望它会有所帮助:-)
答案 2 :(得分:0)
除了其他答案之外,如果您的磁盘空间不足,则可能会发生错误。