2

タスクがあります。リモートサーバー上のWebDAVで利用可能なファイル(SSLが必要)は、最近更新されたかどうかを確認し、更新されている場合はローカルフォルダーにコピーする必要があります。到着後に実行する必要のあるアクションは他にもたくさんあります(他のフォルダーにコピーされたり、処理されたりします)。私が使用しているオペレーティングシステムはWindows2003Serverです。このタスクにPowerShellを使用できるようにしたいと思います。

当然、ファイルを参照する必要があります。私はいくつかの解決策を暫定的に検討しました:

  • 「netuse」を使用してドライブをマップしようとしています(これまでのところ、システム67エラーが発生します)
  • WebDriveなどの製品を使用してドライブをマップする(たまたま、WebDriveとサーバー上の別のユーティリティは、不思議な理由で互いに競合しているようです)
  • PowerShellを介して.NETHTTPWebRequestオブジェクト階層を使用してhttpリクエストを発行することにより、ファイルを参照および操作します(機能しますが、少し複雑に見えます)
  • WebDAV(私が見たものは高価に見える)での作業を簡素化する商用の.NETアセンブリを購入する

同様のことをする必要がありましたか?どのアプローチが最適ですか?私が見逃したものはありますか?TIA。

4

2 に答える 2

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 を開きます。

于 2009-06-29T01:37:10.437 に答える