2009-04-29 8 views
2

J'ai une tâche: les fichiers disponibles sur WebDAV sur un serveur distant (SSL requis) doivent être vérifiés pour savoir s'ils ont été mis à jour récemment, et si oui, copiés dans un dossier local. Il y a un certain nombre d'autres actions qui doivent être effectuées après leur arrivée (copiées dans d'autres dossiers, traitées, etc.). Le système d'exploitation sur lequel je travaille est Windows 2003 Server. J'aimerais pouvoir utiliser PowerShell pour cette tâche.Solution recommandée pour les opérations de script sur WebDAV?

Naturellement, j'ai besoin de parcourir les fichiers. Je l'ai regardé provisoirement plusieurs solutions:

  • Essayer de mapper un lecteur utilisant « net use » (jusqu'à présent, je reçois un système 67 erreur)
  • L'utilisation d'un produit comme WebDrive pour mapper un lecteur (comme arrive, WebDrive et un autre utilitaire sur le serveur semblent entrer en conflit les uns avec les autres pour des raisons mystérieuses)
  • Parcourir et manipuler les fichiers en émettant des requêtes http à l'aide de la hiérarchie d'objets .NET HTTPWebRequest via PowerShell (fonctionne, mais semble un peu compliqué)
  • Achetez un ensemble commercial .NET qui simplifie le travail avec WebDAV (ceux que j'ai vu paraître cher)

Avez-vous eu besoin de faire quelque chose de similaire? Quelle approche est la meilleure? Tout ce que j'ai manqué? TIA.

+0

Je suis curieux à ce sujet aussi. L'option Actions-> Afficher en tant qu'Explorateur de SharePoint fait en quelque sorte ce travail, même sur SSL et les ports non standard, mais je ne sais pas comment. –

Répondre

1

Il fonctionne à partir de powershell. Notez cet exemple:

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

Le problème est que le « service client web » ne fonctionne pas sur le serveur Windows 2003 (il est désactivé par défaut).

L'indice a été le "System 67 error"

Je confirme ce à partir d'un serveur win2k3, à partir du 'service client Web' obtenir WebDAV travail (et probablement Powershell). Il fonctionnera sans problème sur un client XP (le service est en cours d'exécution par défaut). Faites-moi savoir si cela ne vous permet pas de résoudre le problème.

+0

Merci! En l'occurrence, je ne peux pas encore le tester (besoin d'obtenir l'autorisation de l'équipe informatique), mais un bon conseil. – Eldergriffon

1

En alternative à PowerShell, vous pouvez toujours le faire à partir d'un script WSH. Exemple:

<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> 

Un échantillon analysé:

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> 

Cette approche devrait fonctionner avec les deux serveurs WebDAV et FrontPage activé sans changement. L'exemple par défaut est l'auto-négociation de protocole.

Pour récupérer réellement des données, vous devez ouvrir un ADODB.Stream sur un ADODB.Record ouvert sur l'élément hors annuaire.

Questions connexes