【问题标题】:PowerShell -WebClient DownloadFile Wildcards?PowerShell -WebClient 下载文件通配符?
【发布时间】:2011-10-05 04:44:55
【问题描述】:

我想将多个文件从 SharePoint 库复制到本地目录。 可以使用通配符吗? 以下代码不起作用。但是有没有办法使用 WebClient 和通配符? (我必须使用 WebClient。不可能使用 SharePoint WebServices :-( )

$url = "http://mySharePoint/websites/Site/TestDocBib/*.jpg"
$path = "D:\temp\"

$WebClient = New-Object System.Net.WebClient
$WebClient.UseDefaultCredentials = $true
$WebClient.DownloadFile($url, $path)

【问题讨论】:

  • 文件是否在列表中?你可以得到它,解析它,然后单独下载文件......
  • 是的,文件在列表中。但是如何通过列表进行解析呢?无法使用 SharePoint WebService。
  • 为什么不能使用网络服务?规范的答案是调用 List Web 服务的 GetListItems 方法,该方法将为您提供文档库中项目的 URL。然后,您可以将它们与 WebClient 一起使用来下载它们。
  • 感谢您的评论!我意识到 Web 服务是最好的方法。因为没有其他干净的方法来获取文件 url。我想使用网络服务

标签: c# sharepoint powershell webclient


【解决方案1】:

不,抱歉,您不能在 WebClient 中使用通配符。它不是 HTTP 的一部分。

【讨论】:

    【解决方案2】:

    使用 WEBDAV 怎么样?

    c:\> copy \\my.sharepoint.site\sites\foo\doclib\*.jpg c:\temp\
    

    如果客户端(即非共享点)是服务器 2008+ 平台,您需要添加“桌面体验”角色并启用“网络客户端”服务。这与 system.net.webclient 不同;它是 HTTP/DAV 网络重定向器服务。

    如果您需要使用不同的凭据登录,可以使用:

    c:\> net use * "http://my.sharepoint.site/sites/foo/doclib" /user:foobar
    mapped h: to ...
    c:\> copy h:\*.jpg c:\temp
    

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      您可以解析列表的 html。

      # dummy url - i've added allitems.aspx
      $url = "http://mySharePoint/websites/Site/TestDocBib/allitems.aspx"
      $path = "D:\temp\"
      $dl_file = $path + "allitems.html"
      
      $WebClient = New-Object System.Net.WebClient
      $WebClient.UseDefaultCredentials = $true
      $WebClient.DownloadFile($url, $dl_file)
      

      一旦您下载了文件,您就可以通过该文件进行解析 - 快速 google 发现 Lee Holmes 已经完成了大部分操作:

      http://www.leeholmes.com/blog/2005/09/05/unit-testing-in-powershell-%E2%80%93-a-link-parser/

      你想要的主要是正则表达式:

      $regex = “<\s*a\s*[^>]*?href\s*=\s*[`"']*([^`"'>]+)[^>]*?>” 
      

      我很快就破解了 - 这可能(或可能不会)工作......但要点就在那里 :)

      $test = gc $dl_file
      
      $t = [Regex]::Matches($test, $regex, "IgnoreCase")
      $i = 0
      foreach ($tt in $t) { 
          # this assumes absolute paths - you may need to add the hostname if the paths are relative
          $url = $tt.Groups[1].Value.Trim() 
          $WebClient = New-Object System.Net.WebClient
          $WebClient.UseDefaultCredentials = $true
          $WebClient.DownloadFile($url, $($path + $i + ".jpg"))
          $i = $i + 1
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-03
        • 1970-01-01
        • 2015-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-28
        • 1970-01-01
        相关资源
        最近更新 更多