OneDrive Sync via PowerShell

OneDrive-sync

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
$sourceAusgabe der $source-Variablen
$targetAusgabe der $target-Variablen
New-Item -ItemType SymbolicLink -Path $source -Target $targetErstellung des symbolischen Links via New-Item und der zuvor definierten Variablen
gci $targetVerwendung von Get-ChildItem (gci) um den Ordnerinhalt von $target auszulesen
gci $sourceVerwendung 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.

By accepting you will be accessing a service provided by a third-party external to https://blog.ordix.de/