-
Notifications
You must be signed in to change notification settings - Fork 0
/
copy-msi-with-rename.ps1
81 lines (72 loc) · 2.87 KB
/
copy-msi-with-rename.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<#
.SYNOPSIS
Copies the provided MSI location to the root of the repo for easy access, and renames the MSI to include the version number with it.
.EXAMPLE
./copy-msi-with-rename.ps1 "MSI-Location" "Output-Directory-To-Place-The-MSI"
.EXAMPLE
./copy-msi-with-rename.ps1 "C:\Code\MyRepo\InstallerProject\bin\Debug\MyInstaller.msi" "C:\Code\Project"
#>
param(
[string]$msiLocation=$(throw "MSI location is required"),
[string]$exeLocation=$(throw "EXE location is required"),
[string]$outputDirectory=$(throw "Output directory is required")
)
# Initialize internal variables
$versionToAssign = [System.Version]::Parse("0.0.0.1") # default to very early value
Write-Host "RECEIVED DATA"
Write-Host $msiLocation
Write-Host $exeLocation
Write-Host $outputDirectory
# Validate parameters and expected paths
If (![System.IO.File]::Exists($msiLocation)){
Write-Error "MSI file not found! -- $msiLocation"
Exit 2
}
If (!$msiLocation.EndsWith("msi")){
Write-Error "MSI file is not a MSI -- $msiLocation"
Exit 2
}
If (![System.IO.File]::Exists($exeLocation)){
Write-Error "EXE file not found! -- $exeLocation"
Exit 3
}
If (!$exeLocation.EndsWith("exe")){
Write-Error "EXE file is not a EXE -- $exeLocation"
Exit 3
}
Write-Debug "Received $outputDirectory"
$parseMe = $outputDirectory
If ($parseMe.EndsWith("..")){
$parseMe = $parseMe -join '\'
}
Write-Debug "Going to parse $parseMe"
$destinationDirectory = [System.IO.Path]::GetFullPath($parseMe)
Write-Debug "destinationDirectory = '$destinationDirectory'"
If (![System.IO.Directory]::Exists($destinationDirectory)){
Write-Error "Output directory does not exist -- '$destinationDirectory'"
Exit 3
}
# Grab version off known EXE location
try {
$versionToAssign = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($exeLocation)
}
catch [System.Exception] {
$ex = $_.Exception
Write-Warning "Exception thrown trying to get version, going to use default assignment instead -- details: $ex"
}
# Determine destination file location
$newFileName = "PowerChangeAlerter-" + $versionToAssign.ProductVersion + [System.IO.Path]::GetExtension($msiLocation)
Write-Debug "New filename = $newFileName"
$destinationFileLocation = [System.IO.Path]::Combine($destinationDirectory, $newFileName)
Write-Debug "destinationFileLocation = $destinationFileLocation"
# Remove all MSI files from output directory
$filterExtension = "msi"
$deleteList = [System.IO.Directory]::GetFiles($destinationDirectory, "*.$filterExtension")
if ($deleteList.Count -gt 0) {
Write-Host "Found $($deleteList.Count) $filterExtension file(s) to delete in output location, going to delete them"
$deleteList | ForEach-Object { [System.IO.File]::Delete($_) }
}
# Copy source MSI to output directory with adjusted filename
[System.IO.File]::Copy($msiLocation, $destinationFileLocation)
Write-Host "Copied MSI to here: $destinationFileLocation"
Exit 0