OneDrive Sync via PowerShell
Vor ein paar Wochen habe ich aufgezeigt, wie mit einem simplen Kommandozeilen-Befehl zusätzliche Ordner außerhalb von OneDrive für die Synchronisierung eingerichtet werden können. Das Stichwort hierzu sind Symbolische Links. Details hierzu können aus diesem Blogartikel entnommen werden.
Heute möchte ich das ganze für die PowerShell vorstellen. Ausgangsituation ist wieder, dass wir einen Ordner, in diesem Fall D:\PowerShell_Demo\ , in unserem OneDrive synchronisieren möchten. Innerhalb des Ordners habe ich zu Testzwecken eine Text-Datei („Neues Textdokument.txt") abgelegt.
Der OneDrive-Ordner selbst liegt unter C:\Users\sbh\OneDrive - ORDIX AG . Dies lässt sich sehr einfach mittels der folgenden PowerShell-Variablen $env: auslesen:
PS C:\Windows\system32> $env:OneDriveCommercial C:\Users\sbh\OneDrive - ORDIX AG PS C:\Windows\system32> $env:OneDrive C:\Users\sbh\OneDrive - ORDIX AG
Der Unterschied der beiden Variablen besteht darin, dass die Variable $env:OneDrive für das persönliche OneDrive und die Variable $env:OneDriveCommercial für OneDrive for Business zuständig ist. Auf meinem Laptop ist nur OneDrive for Business installiert und somit ist die Ausgabe beider Variablen identisch.
Folgendes PowerShell-Skript erstellt einen symbolischen Link von D:\PowerShell_Demo\ nach C:\Users\sbh\OneDrive - ORDIX AG :
PS C:\Windows\system32> New-Item -ItemType SymbolicLink -Path "C:\Users\sbh\OneDrive - ORDIX AG\test\" -Target "D:\PowerShell_Demo"
Wichtig hierbei ist, dass als ‚-Target' der Ursprungspfad, also der Pfad, von dem aus eine Verknüpfung erstellt werden soll, eingetragen wird. Der ‚-Path'-Parameter gibt an, wo die Verknüpfung erstellt werden soll. Details zur Erstellung eines symbolischen Links via New-Item können hier nachgelesen werden. (Example 7)
Damit alles etwas schicker aussieht, werden wir den Befehl bzw. die Parameter mittels Variablen übergeben:
PS C:\Windows\system32> $target = 'D:\PowerShell_Demo\' PS C:\Windows\system32> $source = $env:OneDriveCommercial + '\test\' PS C:\Windows\system32> $source C:\Users\sbh\OneDrive - ORDIX AG\test\ PS C:\Windows\system32> $target D:\PowerShell_Demo\ PS C:\Windows\system32> New-Item -ItemType SymbolicLink -Path $source -Target $target Verzeichnis: C:\Users\sbh\OneDrive - ORDIX AG Mode LastWriteTime Length Name ---- ------------- ------ ---- d----l 04.05.2021 15:46 test PS C:\Windows\system32> gci $target Verzeichnis: D:\PowerShell_Demo Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 03.05.2021 08:37 0 Neues Textdokument.txt PS C:\Windows\system32> gci $source Verzeichnis: C:\Users\sbh\OneDrive - ORDIX AG\test Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 03.05.2021 08:37 0 Neues Textdokument.txt
Kurze Erklärung der einzelnen Befehle:
Befehl | Erklärung |
$target = 'D:\PowerShell_Demo\' | Wertzuweisung der $target-Variablen |
$source = $env:OneDriveCommercial + '\test\' | Wertzuweisung der $source-Variablen; hierbei wird die Variable $env:OneDriveCommercial plus dem String \test\ zugewiesen. Somit wird später ein Unterordner test erstellt |
$source | Ausgabe der $source-Variablen |
$target | Ausgabe der $target-Variablen |
New-Item -ItemType SymbolicLink -Path $source -Target $target | Erstellung des symbolischen Links via New-Item und der zuvor definierten Variablen |
gci $target | Verwendung von Get-ChildItem (gci) um den Ordnerinhalt von $target auszulesen |
gci $source | Verwendung von Get-ChildItem (gci), um den Ordnerinhalt von $source auszulesen |
Fazit
Auch mit einem simplen PowerShell-Befehl lassen sich weitere Ordner mit Microsoft OneDrive synchronisieren. Einzig die Benennung von -Path & -Target kann zu Beginn etwas verwirrend sein. Durch diesen Artikel sollte aber auch das kein Problem mehr sein.
Senior Chief Consultant bei ORDIX
Bei Updates im Blog, informieren wir per E-Mail.
Kommentare