Avatar billede 2400nv Nybegynder
20. april 2003 - 08:57 Der er 1 løsning

Hjælp til programmering (kopiere brugerdata)

Hej
Jeg har fået hjælp til dette script som kopiere alle de vigtige data fra brugerne. Da jeg intet selv kender til programmering giver jeg 200 point til den, som kan lave mig scriptet.

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.

*******************************************************'
' 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 2400nv Nybegynder
30. april 2003 - 17:45 #1
Jeg tror, jeg lukker spørgsmålet!!
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