通过WebDAV脚本文件操作的推荐解决方案?

问题描述:

我有一个任务:必须检查远程服务器(需要SSL)上通过WebDAV可用的文件是否可能最近已更新,如果已复制到本地文件夹。在到达后需要执行一些其他操作(复制到其他文件夹,进行处理等)。我正在使用的操作系统是Windows 2003 Server。我很想能够使用PowerShell完成此任务。通过WebDAV脚本文件操作的推荐解决方案?

当然,我需要浏览文件。我在几个方案初步看了:

  • 尝试使用“净使用”驱动器映射(到目前为止,我得到一个系统67错误)
  • 使用产品如WebDrive映射驱动器(因为它发生,WebDrive和服务器上的另一个实用程序似乎因为神秘原因而相互冲突)
  • 通过使用.NET HTTPWebRequest对象层次结构通过PowerShell发出http请求来浏览和操作文件(工作,但看起来有点复杂)
  • 购买商业.NET程序集,简化了使用WebDAV的工作(我见过的外观很昂贵)

你需要做类似的事吗?哪种方法最好?我错过了什么? TIA。

+0

我也很好奇。 SharePoint的Actions-> View as Explorer选项以某种方式使这项工作,甚至在SSL和非标准端口,但我不知道如何。 – 2009-04-29 14:50:40

它将从PowerShell中工作。注意这个例子:

http://thepowershellguy.com/blogs/posh/archive/2008/05/31/cd-into-sysinternals-tools-from-powershell.aspx

的问题是,“Web客户端服务”而不是Windows 2003服务器上运行(它的默认禁用)。

线索是"System 67 error"

我证实了这一点从WIN2K3服务器,启动“Web客户端服务”将得到WebDAV的工作(也许PowerShell的)。它将在XP客户端上开箱即用(服务默认运行)。

让我知道如果这不能帮你解决。

+0

谢谢!碰巧,我还不能测试它(需要从IT团队获得许可),但是一个很好的提示。 – Eldergriffon 2009-05-01 04:46:48

作为PowerShell的替代方案,您始终可以通过WSH脚本执行此操作。例如:

<job> 
    <reference object="ADODB.Connection"/> 
    <object id="cnIPP" progId="ADODB.Connection"/> 
    <object id="recDir" progId="ADODB.Record"/> 
    <script language="VBScript"> 
    Option Explicit 

    Private waArgs 
    Private strSubDir 
    Private rsItems 
    Private strLine 

    Set waArgs = WScript.Arguments 

    If waArgs.Count < 3 Then 
    WScript.Echo "Parameters: FolderURL User PW [SubDir]" 
    WScript.Quit 
    End If 

    cnIPP.Open "Provider=MSDAIPP.DSO;Prompt=NoPrompt;" _ 
      & "Connect Timeout=10;" _ 
      & "Data Source=" & waArgs(0), _ 
      waArgs(1), waArgs(2), adConnectUnspecified 

    If waArgs.Count = 4 Then 
    strSubDir = waArgs(3) 
    Else 
    strSubDir = vbNullString 
    End If 
    Set waArgs = Nothing 

    recDir.Open strSubDir, cnIPP, adModeRead, adFailIfNotExists, _ 
       adDelayFetchFields Or adDelayFetchStream 
    Set rsItems = recDir.GetChildren() 
    With rsItems 
    WScript.Echo .Fields("RESOURCE_PARENTNAME").Value 
    Do Until .EOF 
     If .Fields("RESOURCE_ISCOLLECTION").Value Then 
     strLine = " [DIR] " & .Fields("RESOURCE_PARSENAME").Value 
     Else 
     strLine = "  " _ 
       & " " & .Fields("RESOURCE_PARSENAME").Value _ 
       & " " & CStr(.Fields("RESOURCE_LASTWRITETIME").Value) 

     End If 
     WScript.Echo strLine 
     .MoveNext 
    Loop 
    .Close 
    End With 
    Set rsItems = Nothing 
    recDir.Close 

    cnIPP.Close 
    </script> 
</job> 

样品运行:

D:\Scripts>cscript WebDAV.wsf https://my.dav.com/~fred fred fredPW 
Microsoft (R) Windows Script Host Version 5.7 
Copyright (C) Microsoft Corporation. All rights reserved. 

https://my.dav.com/~fred 
     junk.htm 2/26/2008 4:28:44 AM 
     test.log 3/30/2009 12:30:45 PM 
    [DIR] _private 
    [DIR] stuff 

D:\Scripts> 

这种方法应与WebDAV和启用的FrontPage服务器,而无需改变工作。该示例默认为协议自动协商。

要真正检索数据,您需要在打开非目录项的ADODB.Record上打开ADODB.Stream。