Lokalen Ordner am PC anpassen (verschieben)

Um den Ordner einfach nur zu verschieben muss über die Einstellungen der lokale Ordner verschoben werden. Rechte Maustaste auf das Icon im Systemtray klicken, Einstellungen auswählen, zum Register Synchronisation wechseln und oben über den Button verschieben den neuen Speicherplatz im Dateisystem auswählen. Herbei kann nur der übergeordnete Ordner ausgewählt werden. Der Ordner MagentaCLOUD wird dann dorthin verschoben. Es bleib aber als Name für den Sicherungsorder immer MagentaCLOUD.
Die MagentaCloud.App legt für jeden Benutzer in seinem USERPROFILE Ordner den Speicherplatz für den Datenaustausch an.
z.B. c:\Users\[USERNAME]\MagentaCLOUD. (Über den Windows-Explorer wird der Ordner user erst einmal als Benutzer angezeigt)

 

Eigenen lokalen Ordner am PC festlegen (nicht "MagentaCLOUD" als Namen für den Sicherungsordner)

Anmerkung: Damit ein Eintrag in der Datenbank zu finden ist muss zumindest ein Abgleich erfolgt sein. Es reicht schon wenn MagentaCloud begonnen hat Daten zu Synchronisieren
Der Sicherungs-Ordner muss via DB Browser for SQLite Portable angepasst werden, da die Daten in einer SQLite Datenbank gespeichert sind.

0.) MagentaCloud beenden!
1.) DB Browser for SQLite Portable herunterladen entpacken und starten.
2.) Folgende Datenbank-Datei öffnen: %LOCALAPPDATA%\MagentaCLOUD\Data\user.db (Aufruf mit Systemvariablen)
3.) Auf Register "Daten durchsuchen" wechseln. Tabelle user sollte eigentlich schon ausgwählt sein.
    Folgende Einträge der Felder "DownloadsFolderPath" und "SyncFolderPath" auf die gewünschten Pfade anpassen.
    Button "Änderungen schreiben" anklicken und somit die Datenbank zu aktualisieren.
    DatenbankEditor beenden.
z.B. Inhalt des Feldes DownloadsFolderPath von "c:\Users\[user]\MagentaCLOUD\.cache" nach "d:\daten\.cache" und
      Inhalt des Feldes SyncFolderPath "c:\Users\[user]\MagentaCLOUD" nach "d:\daten" ändern
4.) Den kompletten Inhalt des alten Ordners in den neuen verschieben!
5.) MagentaCloudApp starten.

db manager sqlite

 

MagentaCloudApp nur "von Hand" starten

* App mit der rechten Maustaste anklicken und auf Einstellungen gehen. Im Register Allgemein das Häckchen entfernen bei "MagentaClOUD bei Systemstart starten"
* Den Link um die MagentaCloudApp zu starten mit einem Parameter anpassen damit nicht immer der Ordner geöffnet wird 

  "C:\Program Files (x86)\Telekom\MagentaCloud\MagentaCloud.App.exe" /hideexp

 

Mehrere Benutzerkonten verwenden

Wenn ohne jedes mal Benutzerdaten eingeben zu müssen mehrere Benuzterkonten verwendet werden sollen müssen ein paar Schritte erledigt werden.
Es können aber nicht mehrere Clound-Zugänge zur selben Zeit verwendet werden. Leider nur nach einander. Per Skript ist das recht einfach zu erledigen (s.U.).

Folgendes muss dabei beachtet und nacheinander erledigt werden.

1. MagentaCloud.App starten und die Zugangsdaten für den 1. Account eingeben.
2. Order wie oben beschriebenen  anpassen.
3. MagentaCloud.App  schließen und eine Kopie des Ordners anlegen "c:\Users\[USERNAME]\AppData\Local\MagentaCLOUD"
    z.B. "c:\Users\[USERNAME]\AppData\Local\MagentaCLOUD_Account_1"
   und danach den kompletten Inhalt in den 2. Ordner verschieben.
4. MagentaCloud.App erneut starten und die Zugangsdaten für den 2. Account eingeben.
5. Punkt 2 und 3 wiederholen. (Der 3. Ordner sollte z.B. mit "_Account_2" enden)
explorer magentaclound accounts

 6. Ein WSH-Script welches das Programm x mal startet mit unterschiedlichen Einstellungen

MagentaClound_Backup_auf_mehere_Konten.bat

cscript.exe /nologo MagentaClound_Backup_auf_mehrere_Konten.wsh

 
MagentaClound_Backup_auf_mehrere_Konten.wsh

Option Explicit
'--------------------------------------------------
' Version 1.1
' Autor: Michael Hölldobler
' Mit diesem Script können beliebig viele MagentaClound Zugänge verwendet werden.
' Aber immer nur nacheinander und nicht zur selben Zeit!
' Das Skript prüft ob die MagentaClound.App läuft und beendet immer wieder diese.
' Die Prüfung erfolgt indirekt durch die CPU Nutzung des Programms.
' Es werden einzelnen Konten nach einander aufgerufen.
'
' Zum Start gibt es also mindestens einen MagentaCLOUD Ordners mit doppeltem Inhalt.
' z.B. MagentaCLOUD & MagentaCLOUD_Account_1 mit den gleichen Daten
' Ist der SQLite ODBC Driver von Christian Werner installiert muss auch beim Start des Skript nicht darauf geachtet werden ob die Kopie aktuell ist.
' http://www.ch-werner.de/sqliteodbc/
'  64Bit system diese herunterladen und installieren > sqliteodbc_w64.exe  
'  32Bit system > sqliteodbc.exe
'--------------------------------------------------

Dim oWsh, oFS, oWmi, oSel, oO, oFF, oProcess, sPF, sPF86, sPFDim, iWartezeit, closeApps, CPUuse,closeWindowsExplorerFolder, sLocalApp
Dim i, j, p, k, iMagentaClound, sMagentaClound, sMagentaCloudLocalAppData, sCMD, sTmp, sTmp2, arrAccountFolders, iarrAF

Const cAppMagentaClound = "MagentaCloud.App.exe"  ' Hier des Dateinamen des Clound-Programms eintragen
Const cMagentaCLOUD = "MagentaCLOUD"
Const cAppMagentaCloundParameter = " /hideexp"   ' Mit diesem Startparameter wird kein Explorer-Fenster des MagentaCloud-Ordner geöffnet
Const cSpace = " ", cDQ = """", cSQ = "'", cCopy = "XCOPY /Y /V /H /S "

' ------------------------------------------------------------------ 
' --- Script-Einstellungen -----------------------------------------
' ------------------------------------------------------------------ 
' Hier werden die Ordnernamen-Erweiterungen eingetragen für die jeweiligen Accounts. 

' Der Eintrag kann absolut sein, also mit ganzen Pfad
'arrAccountFolders = Array("d:\meine Daten\MagentaCLOUD\konto_1", "d:\meine Daten\MagentaCLOUD\konto_2")
' ODER 
' wenn die Ordner im "LOCALAPPDATA" liegen nur den Appendix eintragen. (z.B. "account_1" nicht "MagentaCLOUD_account_1"
'arrAccountFolders = Array("_account_1", "_account_2") 
' ODER
' Kein Eintrag dann durchsucht das Script den "LOCALAPPDATA"-Ordner nach Unterordner welche mit "MagentaCLOUD" im Namen beginnen  
'arrAccountFolders = Array()  

arrAccountFolders = Array("_Account_1", "_Account_2") 

' Sollte eine bestimmte MagentaClound-Verbindung dauerhaft aktiv sein dann diese als letzten Eintrag in arrAccountFolders eintragen und cCloseApp auf False setzen.
Const cCloseApp = True 

' Soll der PC nach der Sicherung heruntergefahren werden 
Const cfShuddown = False  

' Durch den Startparameter für die MagetaCoud.App wird nicht lokale Sycn-Ornder im Explorer geöffnet. 
' Sollte doch der Ordner geöffnet werden kann hier der Fenster-Titel eingetragen werden
' "MagentaCLOUD" muss nicht eingetragen werden.
closeWindowsExplorerFolder = Array("")

' Programme schließen, welche Dateien beim Öffnen sperren (Komma getrennt) z.B. "outlook.exe"
closeApps = Array("outlook.exe")

' ------------------------------------------------------------------ 
' --- Parameter vorbelegen -----------------------------------------
' ------------------------------------------------------------------ 
Set oWsh = CreateObject("WScript.Shell")
Set oFS  = CreateObject("Scripting.FileSystemObject")
Set oWmi = GetObject("winmgmts:\\.\root\cimv2")
sCMD = oWsh.ExpandEnvironmentStrings("%COMSPEC%") & " /C "
sPF86 = oWsh.ExpandEnvironmentStrings("%ProgramFiles(x86)%") 
sPF = oWsh.ExpandEnvironmentStrings("%ProgramFiles%")
sLocalApp = oWsh.ExpandEnvironmentStrings("%LOCALAPPDATA%")
sMagentaCloudLocalAppData = sLocalApp & "\MagentaCloud"
sMagentaClound = wrap(sPF86 & "\Telekom\MagentaCloud\" & cAppMagentaClound, cDQ, False) & cAppMagentaCloundParameter '"C:\Program Files (x86)\Telekom\MagentaCloud\MagentaCloud.App.exe"

' ------------------------------------------------------------------ 
' --- Funktionen ---------------------------------------------------
' ------------------------------------------------------------------ 
' Prozess-ID auslesen und ggf. das Programm beenden
Function get_pid(programm, fkill)
  get_pid = 0
  If IsObject(oWmi) Then
    'On Error Resume Next
    Set oSel = oWmi.ExecQuery ("Select * from Win32_Process Where Name = '" & programm & cSQ )
    For Each oO In oSel          
      get_pid = oO.ProcessId 'True 'oO.processID
      If fkill Then oO.Terminate      
    Next    
  End If     
End Function

' Bei Leezeichen die Zeichenkette einpacken
Function wrap(v, sWrap, fForce)
  Dim va, s
  va = v
  If va <> vbNullString Then    
    If InStr(1, va, cSpace, vbTextCompare) Or fForce Then va = sWrap & va & sWrap
  End If
  wrap = va
End Function

'je nach Eintrag ob absoluter Pfad oder nur der Anhang 
Function getMagentaCLOUDPath(sFolder)
  If InStr(1, sFolder, ":") Then 'absoluter Pfad
    getMagentaCLOUDPath = sFolder
  Else
    getMagentaCLOUDPath = sLocalApp & "\" & sFolder    
  End If  
End Function


'Inhalt des Ordner leeren
Function emptyFolder(sFolder)
  Set oFF = oFS.GetFolder(sFolder)  
  ' Ordner löschen mit den Zugangsdaten für MagentaCloud
  For Each oO In oFF.SubFolders
    oO.Delete
  Next
  For Each oO In oFF.Files
    oO.Delete
  Next  
  Set oFF = Nothing
End Function

' Soll eine Anwendung geschlossen werden
Function closeApplication()
  Dim obj, s, i, j, k
  'Sanftes Schließen der Anwendung hier z.B. Outlook  
  j = ubound(closeApps)
  If j < 0 Then Exit Function
  'If closeApps(0) = vbNullString Then Exit Function
  On Error Resume Next
  For i = 0 To j
    Set obj = Nothing
    s = closeApps(i)
    Select Case LCase(s)
      Case "outlook", "outlook.exe" 'Alles weiteren Produkte von Office öffnen nicht sperrend
        Set obj = GetObject(, "Outlook.Application")
        If Not obj Is Nothing Then
          j = obj.Inspectors.count
          For k = 1 To j
            obj.Inspectors.Item(k).close 0 'olSave
            WScript.Sleep 500
          Next
          obj.Quit
          Set obj = Nothing
          WScript.Sleep 500          
        Else
          Err.Clear
        End If
    End Select    
  Next
  j = UBound(closeApps)
  For i = 0 To j    
    If closeApps(i) = "outlook" Then
      s = "outlook.exe"
    ElseIf Right(closeApps(i), 4) = ".exe" Then
      s = closeApps(i)
    Else
      s = vbNullString
    End If
    If s <> vbNullString Then      
      k =  get_pid(s, True)      
    End If
  Next 
End Function

' Diese Funktion prüft 4 x hintereinander ob die Anwendung CPU-Zeit in Anspruch nimmt
Function CPUUSage(sAppName)
  Dim N1, D1, N2, D2, k, s, x
  Dim oProcess, oSelA, oSelID  
  Const cS = "Select * from Win32_PerfRawData_PerfProc_Process where IDProcess = "
  On Error Resume Next
  s = "Select * from Win32_Process where Name = " & wrap(sAppName, cSQ, True)
  Set oSelA = oWmi.ExecQuery(s)
  For k = 1 To 4
    For each oProcess in oSelA
      s = cS & wrap(oProcess.Handle, cSQ, True)
      For Each oSelID in oWmi.ExecQuery(s)
        N1 = oSelID.PercentProcessorTime
        D1 = oSelID.TimeStamp_Sys100NS
        Exit For
      Next
      WScript.Sleep 2000 
      For Each oSelID in oWmi.ExecQuery(s)
        N2 = oSelID.PercentProcessorTime
        D2 = oSelID.TimeStamp_Sys100NS
        Exit For
      Next    
      x = x + Round((N2 - N1) / (D2 - D1) * 100, 4)
    Next
    WScript.Sleep 1000
    CPUUSage = CPUUSage + x
  Next  
  Set oSelA = Nothing
End Function 

Function getAccountFolder()
  Dim oFolder, oSubFolder, i, sTmp
  i = UBound(arrAccountFolders)
  If UBound(arrAccountFolders) >= 0 Then
    ' Es wurden Ordner vorbelegt
  Else 
    Set oFolder = oFS.GetFolder(sLocalApp)
    For Each oSubFolder In oFolder.SubFolders
      If InStr(1, oSubFolder.name, cMagentaCLOUD, vbTextCompare) Then
        If oSubFolder.name <> cMagentaCLOUD Then
          i = UBound(arrAccountFolders)
          ReDim Preserve arrAccountFolders(i+1)
          arrAccountFolders(i+1) = oSubFolder.name
        End If
      End If
    Next
  End If
End Function 

Function SQLiteValue(sMagentaCloundFolder)
  Dim oConn, oRst, sConnection,sSQL, sField, sTmp  
  Set oConn = CreateObject("ADODB.Connection")
  Set oRst = CreateObject("ADODB.Recordset")
  
  On Error Resume Next  
  sConnection = "DRIVER=SQLite3 ODBC Driver;Database=" & wrap(getMagentaCLOUDPath(sMagentaCloundFolder) & "\Data\user.db", "'", False) & ";"  'c:\Users\[USER]\AppData\Local\MagentaCLOUD\Data\user.db
  oConn.Open sConnection ' OPEN CONNECTION
  sSQL = "SELECT USER.SyncFolderPath FROM user;"
  
  ' OPEN RECORDSET
  oRst.Open sSQL, oConn
  sTmp = oRst.Fields(0)
  ' OUTPUT TO WORKSHEET
  'orksheets("results").Range("A1").CopyFromRecordset rst
  oRst.Close
  oConn.Close
  Set oConn = Nothing
  SQLiteValue = sTmp
End Function 

Function updateFolder
  sTmp = SQLiteValue(sMagentaCloudLocalAppData)
  If sTmp <> vbNullString Then 'SQLite ODBC Driver ist installiert
    For i = 0 To iarrAF
      sTmp2 = SQLiteValue(getMagentaCLOUDPath(arrAccountFolders(i)))
      If sTmp = sTmp2 Then
        sTmp = sMagentaCloudLocalAppData & "\settings.json"
        sTmp2 = getMagentaCLOUDPath(arrAccountFolders(i))  & "\settings.json"
        If oFS.GetFile(sTmp).DateLastModified > oFS.GetFile(sTmp2).DateLastModified Then
          emptyFolder(sLocalApp & "\" & arrAccountFolders(i))  
          sTmp = sCMD & cCopy & wrap(sMagentaCloudLocalAppData & "\*", cDQ, False) & cSpace & wrap(getMagentaCLOUDPath(arrAccountFolders(i)), cDQ, False) 
          k = oWsh.Run(sTmp, 0, True)          
        End If
        Exit For
      End If
    Next  
  End If
End Function  

Function closeExplorerWindows()
  Dim i, j
  ' Die von MagentaCloudn.app geöffneten Fentser wieder schließen
  j = UBound(closeWindowsExplorerFolder)
  For i = 0 To j
    If oWsh.AppActivate(closeWindowsExplorerFolder(i)) Then 
      oWsh.sendkeys "%{F4}~" 
      WScript.Sleep 250
    End if
  Next
  If oWsh.AppActivate(cMagentaCLOUD) Then oWsh.sendkeys "%{F4}~"
End Function

' ------------------------------------------------------------------ 
' --- Programmteil -------------------------------------------------
' ------------------------------------------------------------------ 
' Ist MagentaCLOUD schon gestartet? Wenn ja schießen.

iMagentaClound = get_pid(cAppMagentaClound, false)
If iMagentaClound <> 0 Then
   ' MagentaClound läuft gerade und es ist nicht klar welcher Account gerade aktiv ist
  ' Das Script wartet jetzt so lange bist die MagentaClound.App keine Aktivät zeigt. Somit müsste der Datenausgleich beendet sein.
  Do    
  Loop Until CPUUSage(cAppMagentaClound) = 0
  
  iMagentaClound = get_pid(cAppMagentaClound, True) 'Magenta Cloud schließen
          
End If

closeApplication
getAccountFolder
iarrAF = UBound(arrAccountFolders)
updateFolder

' Nach und nach die Accounts durchlaufen
For i = 0 To iarrAF
  ' Inhalt des original MagentaCLOUD Ordner löschen
  emptyFolder(sMagentaCloudLocalAppData)
  sTmp = sCMD & cCopy & wrap(getMagentaCLOUDPath(arrAccountFolders(i)) & "\*", cDQ, False) & cSpace & wrap(sMagentaCloudLocalAppData, cDQ, False)
  ' Ordner nach MagentaCLOUD kopieren
  k = oWsh.Run(sTmp, 0, True)
  If k = 0 Then
    oWsh.Run sMagentaClound
    ' Schleife durchlaufen bis die CPU Verwendung dauerhaft 0 ist.
    Do
    Loop Until CPUUSage(cAppMagentaClound) = 0   
  End If
  ' MagentaClound.app nach dem letzten abgleich abschießen  
  If cCloseApp Or i < iarrAF Then 
    iMagentaClound = get_pid(cAppMagentaClound, True)
  End If     
  WScript.Sleep 5000
  
  ' Ordner von MagentaCLOUD nach Sicherung kopieren
  emptyFolder(getMagentaCLOUDPath(arrAccountFolders(i)))
  sTmp = sCMD & cCopy & wrap(sMagentaCloudLocalAppData & "\*", cDQ, False) & cSpace & wrap(getMagentaCLOUDPath(arrAccountFolders(i)), cDQ, False) 
  k = oWsh.Run(sTmp, 0, True) 
Next

closeExplorerWindows

'oWsh.Popup "Sicherung abgeschlossen", 10, "" , vbOK 
If cfShuddown Then 
  'If oWsh.Popup( "Windows herunterfahren ?", 30, "", vbYesNo + vbDefaultButton1) = vbYes Then
    oWsh.Run "shutdown.exe  /p /f", 0, False
 ' End If
End If
Set oWsh = Nothing
Set oFS  = Nothing
Set oWmi = Nothing

 

Anmerkung: Mit GoogleDrive ist dies nicht notwendig da es erlaubt ist mehrere Verbindungen gleichzeitig zu halten.