Toolkit/Private/FileUtils.ps1
<# .SYNOPSIS Utility functions to work with Files and Directories #> function BackupFile { param ( [string]$FilePath, [int]$MaxBackups = 3 ) # Rename existing backups for ($i = $MaxBackups - 1; $i -ge 0; $i--) { $oldBackup = if ($i -eq 0) { "$FilePath.bak" } else { "$FilePath.$i.bak" } $newBackup = "$FilePath." + ($i + 1) + ".bak" if (Test-Path $oldBackup) { if (Test-Path $newBackup) { Remove-Item -Path $newBackup -Force } Rename-Item -Path $oldBackup -NewName $newBackup } } # Create a new backup Copy-Item -Path $FilePath -Destination "$FilePath.bak" -Force } function CopyFileIfDifferent { param ( [string]$SourceFile, [string]$DestinationFile ) # Check if the source and destination files are identical $sourceContent = Get-Content $SourceFile $destinationContent = Get-Content $DestinationFile -ErrorAction SilentlyContinue if ($null -ne $destinationContent -and ($null -eq $sourceContent -or -not (Compare-Object $sourceContent $destinationContent))) { return $false } else { # Backup the existing file if it exists if (Test-Path -Path $destinationFile) { BackupFile -FilePath $destinationFile -MaxBackups 3 } Copy-Item -Path $SourceFile -Destination $DestinationFile -Force return $true } } function CompareFiles { param ( [string]$FileA, [string]$FileB ) $AInfo = Get-Item -Path $FileA -ErrorAction SilentlyContinue $Binfo = Get-Item -Path $FileB -ErrorAction SilentlyContinue if ( $null -eq $AInfo -or $null -eq $Binfo ) { if ( $null -eq $AInfo -and $null -eq $Binfo ) { return "both missing" } elseif ( $null -eq $AInfo ) { return "FileA missing" } else { return "FileB missing" } } $ContentA = Get-Content $AInfo $ContentB = Get-Content $Binfo if ( $null -eq $ContentA -or $null -eq $ContentB ) { if ( $null -eq $ContentA -and $null -eq $ContentB ) { return "both empty" } elseif ( $null -eq $ContentA ) { return "FileA empty" } else { return "FileB empty" } } if (Compare-Object $ContentA $ContentB) { if ($AInfo.LastWriteTime -gt $Binfo.LastWriteTime) { return "FileA newer" } else { return "FileB newer" } } return "same" } |