95 lines
4.5 KiB
PowerShell
95 lines
4.5 KiB
PowerShell
Function Test-IsSourceFileVersionHigherThanTarget {
|
|
<#
|
|
.SYNOPSIS
|
|
Given two file paths, and a common filename, determine which is the latter version
|
|
|
|
.EXAMPLE
|
|
$ProviderTargets = @('BankService','CoreService', 'NotificationService','SecurityManagementService','Radium','Nag','NagConfigurationService')
|
|
|
|
foreach($target in $ProviderTargets) {
|
|
$probePath = (Join-Path (Join-Path "C:\Orb\" $target) "bin")
|
|
if (!(Test-Path $probePath)) {
|
|
$probePath = Split-Path $probePath
|
|
}
|
|
|
|
$filesInProbe = @((Get-ChildItem -Path $probePath -Filter *.dll).Name)
|
|
foreach ($file in $filesInProbe) {
|
|
if (Test-IsSourceFileVersionHigherThanTarget $file $probePath "C:\Orb\Shared" $file) {
|
|
Write-Host "found $file in $probePath higher than shared"
|
|
}
|
|
}
|
|
}
|
|
#>
|
|
[CmdletBinding()]
|
|
param(
|
|
[Parameter(Mandatory = $true,Position=0)]
|
|
[ValidateNotNullOrEmpty()]
|
|
[string]$filename,
|
|
|
|
[Parameter(Mandatory = $true,Position=1)]
|
|
[ValidateScript( {Test-Path (Resolve-Path $_)})]
|
|
[ValidateNotNullOrEmpty()]
|
|
[string]$sourceFolderPath,
|
|
|
|
[Parameter(Mandatory = $true,Position=2)]
|
|
[ValidateScript( {Test-Path (Resolve-Path $_)})]
|
|
[ValidateNotNullOrEmpty()]
|
|
[string]$targetFolderPath,
|
|
|
|
[Parameter(Mandatory = $true,Position=3)]
|
|
[ValidateNotNullOrEmpty()]
|
|
[string]$packageName
|
|
)
|
|
process {
|
|
$loglead = "File tester"
|
|
|
|
$sourceFile = (Join-Path $sourceFolderPath $filename);
|
|
$targetFile = (Join-Path $targetFolderPath $filename);
|
|
if ((Test-Path $sourceFile) -and (Test-Path $targetFile)) {
|
|
$stringVersionFromSourceFileVersion = (Get-Item $sourceFile).VersionInfo.FileVersion
|
|
$stringVersionFromTargetFileVersion = (Get-Item $targetFile).VersionInfo.FileVersion
|
|
|
|
## Both strings have values, so we can read something from that
|
|
if (![System.String]::IsNullOrWhiteSpace($stringVersionFromSourceFileVersion) -and ![System.String]::IsNullOrWhiteSpace($stringVersionFromTargetFileVersion)) {
|
|
## The version info FileVersion has a space and other content in it, so take what comes before the space.
|
|
$versionFromSourceFile = ([System.Version](((Get-Item $sourceFile).VersionInfo.FileVersion -split ' ')[0]))
|
|
$versionFromTargetFile = ([System.Version](((Get-Item $targetFile).VersionInfo.FileVersion -split ' ')[0]))
|
|
Write-Verbose "$loglead : $versionFromSourceFile : $sourceFile";
|
|
Write-Verbose "$loglead : $versionFromTargetFile : $targetFile";
|
|
|
|
## [System.Version] has .CompareTo so we can let it do the native comparison.
|
|
## -1 = source version is lower than target
|
|
## 0 = source version equals target
|
|
## 1 = source version is higher than the target
|
|
$result = $versionFromSourceFile.CompareTo($versionFromTargetFile) -gt 0;
|
|
|
|
## If we decided we are supposed to copy the file _and_ we match this condition of the target file matching a file that already exists
|
|
## We want to emit an error that the files are different and that we shouldn't be copying the files so we can investigate.
|
|
if (!$result -and ($targetFile -match $packageName) -and $versionFromSourceFile.CompareTo($versionFromTargetFile) -eq 0) {
|
|
if ((Get-FileHash $sourceFile).Hash -ne (Get-FileHash $targetFile).Hash) {
|
|
$message = "The files $sourceFile and $targetFile have the same version [$versionFromSourceFile] but the hashes don't match!";
|
|
Write-Error $message;
|
|
return $false
|
|
}
|
|
}
|
|
Write-Verbose "$loglead : Result was $result";
|
|
return $result;
|
|
} else {
|
|
Write-Warning "$loglead : Can not compare these two files because the version info is missing: $sourceFile [$stringVersionFromSourceFileVersion] - $targetFile [$stringVersionFromTargetFileVersion]"
|
|
}
|
|
} else {
|
|
if (($targetFile -match $packageName) -and (Test-Path $sourceFile) -and (Test-Path $targetFile)){
|
|
if ((Get-FileHash $sourceFile).Hash -ne (Get-FileHash $targetFile).Hash) {
|
|
$versionFromSourceFile = ([System.Version](((Get-Item $sourceFile).VersionInfo.FileVersion -split ' ')[0]))
|
|
$message = "The files $sourceFile and $targetFile have the same version [$versionFromSourceFile] but the hashes don't match!";
|
|
Write-Error $message;
|
|
}
|
|
}
|
|
|
|
$result = ((Test-Path $sourceFile) -and !(Test-Path $targetFile));
|
|
Write-Verbose "$loglead : Did the source exist and not the target? $result."
|
|
## Honestly, we don't care about files that only exist in the final folder and not shared
|
|
return $false;
|
|
}
|
|
}
|
|
} |