Avatar billede ms20 Nybegynder
13. april 2003 - 11:52 Der er 20 kommentarer og
2 løsninger

Kopiere brugerdata

Hej
Jeg har fået lavet et vbs-script.

Scriptet kører fint, men jeg kunne godt tænke mig at få tilføjet nogle forskellige ting:

* Et vindue, hvor man kan vælge om man vil lave en backup eller en restore.

* Når man vælger backup eller restore, skal man kunne indlæse eller gemme filer, hvor man ønsker det.

* Et vindue, hvor man kan vælge, hvilke bruger man ønsker at lave backup af (og evt. hvilke man ønsker at indlæse).

Lad os tage en ting af gangen og finde ud af, hvordan vi laver bedst laver en version 2.
Avatar billede 2400nv Nybegynder
13. april 2003 - 12:18 #1
Nu er det mig som har oprettet spørgsmålet på itsvar.dk (http://www.itsvar.dk/doctor/thread.aspx?id=114843), men det er okay, hvis der er nogle her på eksperten.dk som kan finde en løsning på "problemet".

Scriptet som skal rettes er:
 

**************************************************************

' dette script vil kopiere outlook, foretrukne, dokumenter og adressebog
' fra brugere på c: til alle brugere på h: eller omvendt
' parameter hentes - default er c: h: (alle)
on error resume next
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim f
Dim MitNavn
Dim NytNavn
Dim FraDir
Dim TilDir
Dim FilNavn
Dim HvilkenVej
Dim FraDrev
Dim TilDrev
Dim I
Dim Msg
Dim Parametre
Set argsUnnamed = WScript.Arguments.Unnamed
Set WshShell = WScript.CreateObject("WScript.Shell")
Set fs = CreateObject("Scripting.FileSystemObject")
If argsUnnamed.Count > 0 Then RekPar = argsUnnamed.Item(0)
if RekPar = "¡º¹²³¡" then
' *********************************************************************************************
' dette er en underrutine, som kaldes af prog selv (rekursivt kald til gennemløb af undermapper)
' udfører filkopiering og logskrivning
    xTilDrev = argsUnnamed.Item(1)
    if argsUnnamed.Count = 2 then
        xFraDir = argsUnnamed.Item(2)
    else
        xFraDir = ""
        For I = 2 To argsUnnamed.Count - 1
            xFraDir = xFraDir & " " & argsUnnamed.Item(I)
        Next
        xFraDir = Trim(xFraDir)
    end if
    xTilDir = xTilDrev & mid(xFraDir,3,len(xFraDir))
    if fs.folderexists(xFraDir) then
' kopier alle filer i mappen (param2+) til (param1) og kalder sig selv vedr evt undermapper
' opretter mappetræ inkl evt foregående mapper på (param1)
        I = instr(4,xTilDir,"\",1)
        Oprettet = FALSE
        while I > 0
            if not fs.folderexists(left(xTilDir,I)) then
                set fs2 = fs.createfolder(left(xTilDir,I))
                Oprettet = TRUE
            end if
            I = instr(I+1,xTilDir,"\",1)
        wend
        if Oprettet then set fs2 = Nothing
        Set folder1 = fs.GetFolder(xFraDir)
' kopiérer alle filer og tilskriver log-fil
        Set f = fs.OpenTextFile("kopieralt.log", ForAppending, True)
        Oprettet = FALSE
        For each FileName in folder1.files
            if not Oprettet then
                f.Write xFraDir
                f.Write vbCrLf
                Oprettet = TRUE
            end if
            xFraFil = xFraDir & FileName.name
            xTilFil = xTilDir & FileName.name
            intReturn = fs.CopyFile(xFraFil, xTilFil, TRUE)
            if err.number = 0 then
                f.Write space(5) & FileName.name & vbCrLf
            else
                f.Write "Fejl " & err.Description & ": " & FileName.name & vbCrLf
                err.Clear
            end if
        next
        f.Close
' finder undermapper i folderen FraDir, og kalder sig selv med nye parametre
        Set SubFolders = folder1.SubFolders
        If SubFolders.Count <> 0 Then
            for Each SubFolder In SubFolders
                xNytDir = SubFolder.Path
                if not right(xNytDir,1) = "\" then xNytDir = xNytDir & "\"
                intReturn = WshShell.Run("kopieralt.vbs ¡º¹²³¡ " & xTilDrev & " " & xNytDir, 7, FALSE)
            Next
        End If
        Set folder1 = nothing
        Set SubFolders = nothing
    end if
else
' *********************************************************************************************
' dette er hovedrutinen, som brugeren kalder
    MitNavn = ""
    FraDir = "D:"
    TilDir = "Q:\Brugerprofile\"
    If argsUnnamed.Count > 0 Then FraDir = argsUnnamed.Item(0)
    If argsUnnamed.Count > 1 Then TilDir = argsUnnamed.Item(1)
    If argsUnnamed.Count > 2 Then
        MitNavn = ""
        For I = 2 To argsUnnamed.Count - 1
            MitNavn = MitNavn & " " & argsUnnamed.Item(I)
        Next
        MitNavn = Trim(MitNavn)
    End If
' er parametre ok, så kopiér data til brugere
    If fs.folderexists(FraDir & "\Documents and Settings\") _
    And Mid(FraDir, 2, 1) = ":" _
    And Mid(TilDir, 2, 1) = ":" Then
        If MitNavn = "" Then
            intReturn = MsgBox("Vil du kopiere data fra brugerne på " & FraDir & vbCrLf & "til brugerne på " & TilDir, vbYesNo, "Kopier")
        Else
            intReturn = MsgBox("Vil du kopiere data fra " & MitNavn & " på " & FraDir & vbCrLf & "til " & MitNavn & " på " & TilDir, vbYesNo, "Kopier")
        End If
        If intReturn = vbYes Then
' lav en logfil
            Set f = fs.OpenTextFile("kopieralt.log", ForAppending, True)
            f.Write vbCrLf
            f.Write vbCrLf
            f.Write Now()
            f.Write vbCrLf
            f.Write "Kopiere Outlook, Adressebog, Dokumenter og Foretrukne fra " & FraDir & " til " & TilDir & vbCrLf
            f.Close
' finder brugere på fradrevet:
            FraDir = FraDir & "\Documents and Settings\"
            Set folder1 = fs.GetFolder(FraDir)
            Set SubFolders = folder1.SubFolders
' kopierer filer
            If SubFolders.Count <> 0 Then
                For Each SubFolder In SubFolders
                    NytNavn = SubFolder.Path
                    NavnOk = False
                    If MitNavn = "" Then
                        NavnOk = True
                        If LCase(Right(NytNavn,10)) = "\all users" Or LCase(Right(NytNavn,13)) = "\default user" Then NavnOk = False
                    Else
                        If LCase(Right(NytNavn, Len(MitNavn)+1)) = "\" & LCase(MitNavn) Then NavnOk = True
                    End If
                    If NavnOk Then
                        I = InStr(1, NytNavn, "Settings\", 1) + 9
' fjerner evt skrivebekyttelse på filer og mapper (dog ikke på skjulte)
'                        intReturn = WshShell.Run("cmd /c attrib -r /s /d """ & TilDrev & mid(NytNavn,3,len(NytNavn)) & "\*.*""", 7, FALSE)
' skriver log - ny persons data
                        Set f = fs.OpenTextFile("kopieralt.log", ForAppending, True)
                        f.Write vbCrLf
                        f.Write Mid(NytNavn, I, Len(NytNavn))
                        f.Write vbCrLf
                        f.Close
                        FraDrev = NytNavn
                        TilDrev = Left(TilDir, 2)
' *********************************************************************************************
' flere filer kan medtages ved at kopierer og tilrette disse linier
'    FilNavn = stedet, hvor filerne ligger pånær c:\doc...\brugernavn
'  intReturn linien kopieres (skal ikke tilrettes)
' emails osv for alle identiteter på brugeren
                        FilNavn = "\Lokale indstillinger\Application Data\Identities\"
                        intReturn = WshShell.Run("kopieralt.vbs ¡º¹²³¡ " & TilDrev & " " & FraDrev & FilNavn, 7, FALSE)
' outlook fil
                        FilNavn = "\Lokale indstillinger\Application Data\Microsoft\Outlook\"
                        intReturn = WshShell.Run("kopieralt.vbs ¡º¹²³¡ " & TilDrev & " " & FraDrev & FilNavn, 7, FALSE)
' adressebog
                        FilNavn = "\Application Data\Microsoft\Address Book\"
                        intReturn = WshShell.Run("kopieralt.vbs ¡º¹²³¡ " & TilDrev & " " & FraDrev & FilNavn, 7, FALSE)
' outlook regler og øvrig opsætning
                        FilNavn = "\Application Data\Microsoft\Outlook\"
                        intReturn = WshShell.Run("kopieralt.vbs ¡º¹²³¡ " & TilDrev & " " & FraDrev & FilNavn, 7, FALSE)
' dokumenter
                        FilNavn = "\Dokumenter\"
                        intReturn = WshShell.Run("kopieralt.vbs ¡º¹²³¡ " & TilDrev & " " & FraDrev & FilNavn, 7, FALSE)
' foretrukne
                        FilNavn = "\Foretrukne\"
                        intReturn = WshShell.Run("kopieralt.vbs ¡º¹²³¡ " & TilDrev & " " & FraDrev & FilNavn, 7, FALSE)
                    End If
                Next
                Set folder1 = Nothing
                Set SubFolders = Nothing
            End If
        Else
            MsgBox "Intet kopieret - bruger afbrød..."
        End If
    Else
' hvis fejl i fra-navn eller andre parametre, så vis fejl
        If Mid(FraDir, 2, 1) <> ":" Then
            Msg = "Startdrev mangler (1. parameter)"
        ElseIf Mid(TilDir, 2, 1) <> ":" Then
            Msg = "Måldrev mangler (2. parameter)"
        Else
            Msg = "Bruger ikke fundet"
        End If
        Msg = Msg & vbCrLf & "parametre er startdrev måldrev [navn på kilde]" & vbCrLf
        Msg = Msg & "fx c: h: Hans Hansen" & vbCrLf
        Msg = Msg & "for at kopiere/sende hans hansens data på drev c til drev h" & vbCrLf
        Msg = Msg & "uden parametre sendes alle brugeres data på c: til h:"
        NytNavn = InputBox(Msg, "Parametre?", argsUnnamed.Item(0) & " " & argsUnnamed.Item(1) & " " & MitNavn)
        intReturn = WshShell.Run("kopieralt.vbs " & NytNavn, 7, False)
    End If
    Set f = Nothing
end if
Set WshShell = Nothing
Set fs = Nothing
Avatar billede ms20 Nybegynder
13. april 2003 - 12:20 #2
Er det OK med dig nicolai?
Avatar billede 2400nv Nybegynder
13. april 2003 - 12:36 #3
Det er helt okay, at du opretter spørgsmålet her ;-) Det er kun dejligt, hvis andre også kan bruge ens ideér. Jeg kender intet til programmering selv, så alt hjælp er velkommen.

Har du prøvet scriptet?
Avatar billede ms20 Nybegynder
13. april 2003 - 12:38 #4
Jeg kender heller intet til programmering selv, jeg holder mig til det "nemme"! :-)
Avatar billede ms20 Nybegynder
13. april 2003 - 12:38 #5
Jeg vil bare meget gerne hjælpe dig... fordi der er ingender har siden du oprettede dit spg.!
Avatar billede 2400nv Nybegynder
13. april 2003 - 12:51 #6
Ellers skulle ham som har lavet scriptet være igang med at lave et nyt. Hans computer har været nede, så der går nok nogle dage inden jeg hører fra ham.
Avatar billede 2400nv Nybegynder
13. april 2003 - 13:27 #7
Hvis du opretter spørgsmålet med 50 eller 100 point, vil jeg godt være med på en andel. Jeg opretter bare et spørgsmålet, hvor du kan få dine point.
Avatar billede ms20 Nybegynder
13. april 2003 - 15:11 #8
OK!

jeg jeg sætter det op til 50!
Avatar billede 2400nv Nybegynder
13. april 2003 - 16:21 #9
Fint. Vil du havde de 25 point nu eller skal vi vente til spørgsmålet bliver lukket?
Avatar billede ms20 Nybegynder
13. april 2003 - 16:23 #10
bare nu :-)
Avatar billede 2400nv Nybegynder
13. april 2003 - 16:32 #11
Avatar billede 2400nv Nybegynder
17. april 2003 - 14:30 #12
Der sker hvis ikke så meget med spørgsmålet her?
Avatar billede ms20 Nybegynder
17. april 2003 - 15:17 #13
næ - det er åbenbart for svært?
Avatar billede 2400nv Nybegynder
25. april 2003 - 19:51 #14
Det er åbenbart for svært....
Avatar billede ms20 Nybegynder
25. april 2003 - 20:31 #15
nejjjjjjjjjjjjjjjjj............ Det er M E G E T S V Æ R T !
Avatar billede ms20 Nybegynder
30. april 2003 - 20:14 #16
nå ska vi luk?

du får dine point tilbage!
Avatar billede 2400nv Nybegynder
30. april 2003 - 20:17 #17
Jeg tror, vi lukker og slukker ;-)
Avatar billede ms20 Nybegynder
30. april 2003 - 20:18 #18
kk

svar lige!
Avatar billede 2400nv Nybegynder
30. april 2003 - 20:18 #19
Er hermed gjort!!
Avatar billede ms20 Nybegynder
30. april 2003 - 20:19 #20
25 point til dig om mig!

se selv her: http://www.eksperten.dk/spm/340088
Avatar billede 2400nv Nybegynder
30. april 2003 - 20:20 #21
Mange tak :-)
Avatar billede ms20 Nybegynder
30. april 2003 - 20:22 #22
:)
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