2009-04-29 44 views
2

我有一個任務:必須檢查遠程服務器(需要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

回答

1

它將從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

1

作爲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。

相關問題