Avatar billede bat1234 Juniormester
11. januar 2005 - 10:12 Der er 5 kommentarer og
2 løsninger

Logon script der synkroniserer

Hej,

kan nogen vise mig et logon-script der skal bruges i et win2000-domæne, som kan synkronisere en mappe på serveren med en mappe på brugernes lokale c:-drev??

Scriptet skal altså kopiere de ændrede filer på serveren over på c:-drevene, og også slette filer som måtte være blevet slettet på serveren.

Vh,

Bat.
Avatar billede tofte Juniormester
11. januar 2005 - 12:51 #1
Har engang lavet noget lignende. Scriptet i bunden bude være det du søger:
http://www.eksperten.dk/spm/546850
Avatar billede maximus25 Nybegynder
11. januar 2005 - 13:25 #2
Hejsa bat1234

her er et script som checker hvor gammel en fil er og kopierer en nyere fra en anden mappe hvis der findes en nyere fil.
Du skal bare ændre stierne så virker det hos dig:)

Dim WSHNetwork
Dim FSO
Dim path
Dim file
Dim folder
Dim foldername
Dim strUserName ' Current user
Dim strUserDomain ' Current User's domain name
Dim ObjGroupDict ' Dictionary of groups to which the user belongs

Set WSHNetwork = WScript.CreateObject("WScript.Network")
Set FSO = CreateObject("Scripting.FileSystemObject")
'
' Wait until the user is really logged in...
'
strUserName = ""
While strUserName = ""

strUserName = WSHNetwork.UserName
Wend
strUserDomain = WSHNetwork.UserDomain

' Read the user's account "Member Of" tab info across the network
' once into a dictionary object.



'Checking if user is member of group


path    = "\\maskine\c$"
file    = "test.txt"
folder  = "testfolder"


foldername = "nytestfolder"


Dim mFile1
Dim mFile2

Set fso = CreateObject("Scripting.FileSystemObject")
Set mFile1 = fso.GetFile(path & "\" & foldername & "\" & file)

If fso.FileExists(path & "\" & folder & "\" & file) then

Set mFile2 = fso.GetFile(path & "\" & folder & "\" & file)

If mFile1.DateLastModified > mFile2.DateLastModified Then
msgbox "test2"
        fso.CopyFile path & "\" & foldername & "\" & file, path & "\" & folder & "\" , True
msgbox "test1"
end if
else
        'fso.CopyFile path & "\" & foldername & "\" & file, path & "\" & folder & "\" , True
msgbox "test"
end if


Håber du kan bruge det:):)
Avatar billede bat1234 Juniormester
12. januar 2005 - 07:57 #3
Tofte: dit script ser godt ud, det klarer det jeg skal bruge et langt stykke af vejen! Men det checker ikke datelastmodified, og kopierer derfor ikke filer fra sourcetarget som som er blevet ændret. Tror du du kunne hjælpe mig med at få det ind i koden også!? Måske kan noget af det fra Maximus25's kode bruges??

Maximus25: Tak for koden. Jeg kan nok bruge noget af den.
Avatar billede bat1234 Juniormester
12. januar 2005 - 07:59 #4
Tofte: Jeg sætter koden ind her:

option explicit
dim targetFolder,sourceFolder

sub log(msg)
    'msgBox msg
end sub

function Chk(sourceFolder,targetFolder)
    chk=true
    if not objFSO.FolderExists(sourceFolder) then
        MsgBox("Kan ikke åbne kilde : "&sourceFolder)
        chk=false
    end if

    if not objFSO.FolderExists(targetFolder) then
        msgBox("Kan ikke åbne destination : "&targetFolder)
        chk=false
    end if
end function

sub Quit()
    MsgBox "Forbindelsen til netværket afbrudt"
    WScript.Quit
end sub

sub doCopy(sourceFolder,targetFolder)
    dim folder,fileCol,folderCol,fil,tFolder,tFileCol,tFolderCol,FileStr,FolderStr
    Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

    set folder = objFSO.getFolder(sourceFolder)
    set tFolder = objFSO.getFolder(targetFolder)

    set tFolderCol=tFolder.SubFolders
    set tFileCol=tFolder.Files

    set fileCol = folder.Files
    set folderCol=folder.SubFolders
   
    FileStr=""
    For Each fil in tFileCol
        FileStr=FileStr&";"&fil.name&";,"
    next
    FolderStr=""
    For Each folder in tFolderCol
        FolderStr=FolderStr&";"&folder.name&";,"
    next
    For Each fil in filecol
        if not objFSO.FileExists(targetFolder&"\"&fil.name) then
            objFSO.CopyFile SourceFolder&"\"&fil.name, targetFolder&"\"&fil.name
           
            If Err.Number = 0 Then
                log "Copying file: "&sourceFolder&"\"&fil.name
            else
              Quit()
            end if
        end if
        FileStr=Replace(FileStr,";"&fil.name&";,","")
    next   

    For Each folder in folderCOl
        if not objFSO.FolderExists(targetFolder&"\"&folder.name) then
           
            objFSO.CreateFolder(targetFolder&"\"&folder.name)
            If Err.Number = 0 Then
                log "Creating folder: "&sourceFolder&"\"&folder.name
            else
                Quit()
            end if

        end if
        FolderStr=Replace(FolderStr,";"&folder.name&";,","")
        doCopy sourceFolder&"\"&folder.name,targetFolder&"\"&folder.name   
    next   

    set fileCol = nothing
    set folderCol = nothing
    set folder = nothing
   
    dim delArrFile,delArrFolder,a

    if len(FileStr)>0 then
        delArrFile=split(FileStr,",")
        For a = LBound(delArrFile) to UBound(delArrFile)-1
            objFSO.DeleteFile(targetFolder&"\"&replace(delArrFile(a),";",""))   
        next
    end if

    if len(FolderStr)>0 then
       
        delArrFolder=split(FolderStr,",")
        For a = LBound(delArrFolder) to UBound(delArrFolder)-1
            objFSO.DeleteFolder(targetFolder&"\"&replace(delArrFolder(a),";",""))   
        next
    end if
   
    set tFileCol = nothing
    set tFolderCol = nothing
    set tFolder = nothing   
end sub

Dim objFSO,wshShell
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

sourceFolder="C:\templates"
targetFolder="d:\templates"

Set WshShell = CreateObject("WScript.Shell")
WshShell.Popup "Begynder kopiering", 2, , 0

if (chk (sourceFolder,targetFolder)) then
    doCopy sourceFolder,targetFolder
    WshShell.Popup "Kopiering afsluttet", 2, , 0
end if

Set WshShell = nothing
Set objFSO = nothing
Avatar billede tofte Juniormester
12. januar 2005 - 16:37 #5
Hvis du ændrer nedenstående afsnit burde det virke således at hvis filerne på kildne er nyere end på destinationen bliver de kopieret
    For Each fil in filecol
        if not objFSO.FileExists(targetFolder&"\"&fil.name) then
            objFSO.CopyFile SourceFolder&"\"&fil.name, targetFolder&"\"&fil.name
           
            If Err.Number = 0 Then
                log "Copying file: "&sourceFolder&"\"&fil.name
            else
              Quit()
            end if
    else
        dim tfile
        set tfile=objFSO.getFile(targetFolder&"\"&fil.name)
        if (tfile.DateLastModified < fil.DateLastModified) then
            objFSO.CopyFile SourceFolder&"\"&fil.name, targetFolder&"\"&fil.name
        end if
        end if
        FileStr=Replace(FileStr,";"&fil.name&";,","")
    next
Avatar billede lap Nybegynder
16. januar 2005 - 16:37 #6
Jeg kan anbefale rossourcekittet's robocopy som godt nok er en exe-fil, men som kan spejle mapper - incl. opdatere filer og slette filer som bliver til overs.
Avatar billede bat1234 Juniormester
30. januar 2005 - 18:10 #7
Yes. Scriptet kom til at virke som jeg ville have det. Tak til alle.
lap: Ja jeg kender godt robocopy og synes det er godt. Men jeg ville nu helst undgå at bruge det i dette tilfælde da jeg ellers ville skulle lægge robocopy ind på alle brugernes pc'er.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester