Last active
June 1, 2020 19:20
-
-
Save josy1024/523fdfdb22bf69905b9a4a86a391133d to your computer and use it in GitHub Desktop.
Sync - TOOL Library settings - Folders for Carbide Create
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<# | |
.SYNOPSIS | |
Sync-Folders | |
.DESCRIPTION | |
sync settings folders to onedrive settings folders | |
.EXAMPLE | |
PS C:\> SYNC-Folders.ps1 | |
.INPUTS | |
$source = "sourcefolder" | |
$Destination = "Onedrive-Destination-Folder" | |
.OUTPUTS | |
Output (if any) | |
.NOTES | |
carbide-create-tool-library-on-autostart | |
place link to file in "shell:startup" | |
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe %userprofile%\OneDrive\ps\SYNC-FOLDERS.ps1 | |
Thanks to: https://stackoverflow.com/questions/677789/powershell-copy-item-but-only-copy-changed-files | |
#> | |
[CmdletBinding()] | |
param ( | |
[Parameter()] | |
[string] | |
$Source="$env:localappdata\Carbide 3D\Carbide Create\tools", | |
[string] | |
$Destination = "$env:userprofile\OneDrive\Anwendungen\settings\Carbide Create\Carbide Create\tools" | |
) | |
function Get-FileMD5 { | |
Param([string]$file) | |
$mode = [System.IO.FileMode]("open") | |
$access = [System.IO.FileAccess]("Read") | |
$md5 = New-Object System.Security.Cryptography.MD5CryptoServiceProvider | |
$fs = New-Object System.IO.FileStream($file,$mode,$access) | |
$Hash = $md5.ComputeHash($fs) | |
$fs.Close() | |
[string]$Hash = $Hash | |
Return $Hash | |
} | |
function Copy-LatestFile{ | |
Param($File1,$File2,[switch]$whatif) | |
$File1Date = get-Item $File1 | foreach-Object{$_.LastWriteTimeUTC} | |
$File2Date = get-Item $File2 | foreach-Object{$_.LastWriteTimeUTC} | |
if($File1Date -gt $File2Date) | |
{ | |
Write-Host "$File1 is Newer... Copying..." | |
if($whatif){Copy-Item -path $File1 -dest $File2 -force -whatif} | |
else{Copy-Item -path $File1 -dest $File2 -force} | |
} | |
else | |
{ | |
#Don't want to copy this in my case..but good to know | |
Write-Host "$File2 is Newer... Copying..." | |
if($whatif){Copy-Item -path $File2 -dest $File1 -force -whatif} | |
else{Copy-Item -path $File2 -dest $File1 -force} | |
} | |
Write-Host | |
} | |
# Getting Files/Folders from Source and Destination | |
$SrcEntries = Get-ChildItem $Source -Recurse | |
$DesEntries = Get-ChildItem $Destination -Recurse | |
# Parsing the folders and Files from Collections | |
$Srcfolders = $SrcEntries | Where-Object{$_.PSIsContainer} | |
$SrcFiles = $SrcEntries | Where-Object{!$_.PSIsContainer} | |
$Desfolders = $DesEntries | Where-Object{$_.PSIsContainer} | |
$DesFiles = $DesEntries | Where-Object{!$_.PSIsContainer} | |
# Checking for Folders that are in Source, but not in Destination | |
foreach($folder in $Srcfolders) | |
{ | |
$SrcFolderPath = $source -replace "\\","\\" -replace "\:","\:" | |
$DesFolder = $folder.Fullname -replace $SrcFolderPath,$Destination | |
if(!(test-path $DesFolder)) | |
{ | |
Write-Host "Folder $DesFolder Missing. Creating it!" | |
new-Item $DesFolder -type Directory | out-Null | |
} | |
} | |
# Checking for Folders that are in Destinatino, but not in Source | |
foreach($folder in $Desfolders) | |
{ | |
$DesFilePath = $Destination -replace "\\","\\" -replace "\:","\:" | |
$SrcFolder = $folder.Fullname -replace $DesFilePath,$Source | |
if(!(test-path $SrcFolder)) | |
{ | |
Write-Host "Folder $SrcFolder Missing. Creating it!" | |
new-Item $SrcFolder -type Directory | out-Null | |
} | |
} | |
# Checking for Files that are in the Source, but not in Destination | |
foreach($entry in $SrcFiles) | |
{ | |
$SrcFullname = $entry.fullname | |
$SrcName = $entry.Name | |
$SrcFilePath = $Source -replace "\\","\\" -replace "\:","\:" | |
$DesFile = $SrcFullname -replace $SrcFilePath,$Destination | |
if(test-Path $Desfile) | |
{ | |
$SrcMD5 = Get-FileMD5 $SrcFullname | |
$DesMD5 = Get-FileMD5 $DesFile | |
If(Compare-Object $srcMD5 $desMD5) | |
{ | |
Write-Host "The Files MD5's are Different... Checking Write Dates" | |
Write-Host $SrcMD5 | |
Write-Host $DesMD5 | |
Copy-LatestFile $SrcFullname $DesFile | |
} | |
} | |
else | |
{ | |
Write-Host "$Desfile Missing... Copying from $SrcFullname" | |
copy-Item -path $SrcFullName -dest $DesFile -force | |
} | |
} | |
# Checking for Files that are in the Destinatino, but not in Source | |
foreach($entry in $DesFiles) | |
{ | |
$DesFullname = $entry.fullname | |
$DesName = $entry.Name | |
$DesFilePath = $Destination -replace "\\","\\" -replace "\:","\:" | |
$SrcFile = $DesFullname -replace $DesFilePath,$Source | |
if(!(test-Path $SrcFile)) | |
{ | |
Write-Host "$SrcFile Missing... Copying from $DesFullname" | |
copy-Item -path $DesFullname -dest $SrcFile -force | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment