2009-04-29 10 views
2

私はタスクがあります:リモートサーバー上のWebDAV経由で利用可能なファイル(SSLが必要)は、最近更新されている可能性があるかどうか、またその場合はローカルフォルダにコピーされているかどうかを確認する必要があります。到着後に実行する必要がある他のアクションが多数あります(他のフォルダーにコピー、処理されたなど)。作業しているオペレーティングシステムはWindows 2003 Serverです。私はこの作業にPowerShellを使うことができたいと思っています。WebDAVを介したファイル操作のスクリプティングに推奨されるソリューションですか?

もちろん、ファイルを参照する必要があります。それとして(「ネット使用」を使用してドライブをマップしようとすると

  • (これまでのところ、私はシステム67のエラーが表示されます)ドライブをマップするためにWebDriveのような製品を使用して
  • :私はいくつかの解決策で暫定的に見てきました
  • PowerShellで.NET HTTPWebRequestオブジェクト階層を使用してhttp要求を発行してファイルを参照して操作する(動作は複雑ですが)
  • WebDAVを使用して簡単に作業できる市販の.NETアセンブリを購入してください(高価なものとして見たことがあります)

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

+0

私もこれについて興味があります。 SharePointのアクション→エクスプローラとして表示オプションは、SSLと非標準ポート上でさえ、何らかの形でこの作業を行いますが、どうすればよいかわかりません。 –

答えて

1

これはpowershellで動作します。この例注:

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

問題は(デフォルトでは無効になっています)のWebクライアントサービス「Windows 2003のサーバー上で稼働していないということです。

手がかりは、私は(そしておそらくPowerShellを)作業WebDAVを取得するのWebクライアントサービス」を開始し、WIN2K3サーバからこれを確認"System 67 error"

ました。それは、XPクライアント(サービスはデフォルトで実行されています)上で動作します。

これで解決できない場合はお知らせください。

+0

ありがとう!それが起こると、私はまだこれをテストすることができません(ITチームからの認可を得る必要があります)が、大きなヒントです。 – Eldergriffon

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

関連する問題