From 39c32125f7f46fde8c89515983e221cf78386beb Mon Sep 17 00:00:00 2001 From: Trond Hindenes Date: Sun, 6 Jul 2014 22:34:37 +0200 Subject: [PATCH 1/2] improved msi --- windows/win_msi | 12 +++++++- windows/win_msi.ps1 | 73 +++++++++++++++++++++++++++++++++++++++------ 2 files changed, 75 insertions(+), 10 deletions(-) diff --git a/windows/win_msi b/windows/win_msi index 9eb6f1bafa5..12da6e1422c 100644 --- a/windows/win_msi +++ b/windows/win_msi @@ -45,7 +45,15 @@ options: description: - Path to a file created by installing the MSI to prevent from attempting to reinstall the package on every run -author: Matt Martz + msiname: + description: + - alternative way to check for the existence of an msi (can be used for both states (absent and present). + The msiname can be found by looking at name property of the the win32_product object for the item. + msiversionstring + description: + - used in conjunction with msiname - you cannot specify msiversionstring only. + The msiversionstring can be found by looking at version property of the the win32_product object for the item. +author: Matt Martz / Trond Hindenes ''' EXAMPLES = ''' @@ -54,5 +62,7 @@ EXAMPLES = ''' # Uninstall an MSI file - win_msi: path=C:\\\\7z920-x64.msi state=absent + +- win_msi: path=C:\\\\7z920-x64.msi msiname="myproduct" msiversionstring="3.2.0" ''' diff --git a/windows/win_msi.ps1 b/windows/win_msi.ps1 index 1c2bc8a3019..6f27e0eea34 100644 --- a/windows/win_msi.ps1 +++ b/windows/win_msi.ps1 @@ -24,34 +24,89 @@ $params = Parse-Args $args; $result = New-Object psobject; Set-Attr $result "changed" $false; -If (-not $params.path.GetType) +If (!($params.path)) { Fail-Json $result "missing required arguments: path" } -$extra_args = "" -If ($params.extra_args.GetType) +if (!(test-path $params.path)) +{ + Fail-Json $result "couldn't find a file at $($params.path)" +} + + +If ($params.extra_args) { $extra_args = $params.extra_args; } - -If ($params.creates.GetType -and $params.state.GetType -and $params.state -ne "absent") +Else { - If (Test-File $creates) + $extra_args = "" +} + +if ($params.MsiVersionString) +{ + $MsiVersionString = $params.MsiVersionString +} + +if ($params.MsiName) +{ + $MsiName = $params.MsiName +} + +if (($MsiVersionString) -and (!($MsiName))) +{ + #If msiversionstring is specified, we need msiname as well + Fail-Json $result "missing required arguments: MsiName" +} + + +If (($params.creates) -and ($params.state -ne "absent")) +{ + If (Test-Path ($params.creates)) { Exit-Json $result; } } -$logfile = [IO.Path]::GetTempFileName(); -if ($params.state.GetType -and $params.state -eq "absent") +if ($MsiName) { - msiexec.exe /x $params.path /qb /l $logfile $extra_args; + $AlreadyInstalledMsi = Get-WmiObject -Query "Select * from win32_product" | where {$_.Name -eq $MsiName} +} +ElseIf (($MsiName) -and ($MsiVersionString)) +{ + $AlreadyInstalledMsi = Get-WmiObject -Query "Select * from win32_product" | where {($_.Name -eq $MsiName) -and ($_.version -eq $MsiVersionString)} } Else { + if ($params.state -eq "absent") + { + #existing msi check not specify, assume msi does exist + $AlreadyInstalledMsi = $true + } + if ($params.state -eq "present") + { + #existing msi check not specify, assume msi does exist + $AlreadyInstalledMsi = $false + } +} + +if (($AlreadyInstalledMsi) -and ($params.state -eq "absent")) +{ + #Already installed, perform uninstall + msiexec.exe /x $params.path /qb /l $logfile $extra_args; +} +Elseif((!$AlreadyInstalledMsi) -and ($params.state -eq "present")) +{ + #Not already installed, perform the install + $logfile = [IO.Path]::GetTempFileName(); msiexec.exe /i $params.path /qb /l $logfile $extra_args; } +Else +{ + #Do nothing + Exit-Json $result; +} Set-Attr $result "changed" $true; From 12df81409eede253633bbd0822ba0a6b5b8b2e02 Mon Sep 17 00:00:00 2001 From: Trond Hindenes Date: Sun, 6 Jul 2014 22:36:01 +0200 Subject: [PATCH 2/2] Revert "improved msi" This reverts commit 7eac2121a54b8859aecbd5af37ef3adcec4d5da7. --- windows/win_msi | 12 +------- windows/win_msi.ps1 | 71 +++++---------------------------------------- 2 files changed, 9 insertions(+), 74 deletions(-) diff --git a/windows/win_msi b/windows/win_msi index 12da6e1422c..9eb6f1bafa5 100644 --- a/windows/win_msi +++ b/windows/win_msi @@ -45,15 +45,7 @@ options: description: - Path to a file created by installing the MSI to prevent from attempting to reinstall the package on every run - msiname: - description: - - alternative way to check for the existence of an msi (can be used for both states (absent and present). - The msiname can be found by looking at name property of the the win32_product object for the item. - msiversionstring - description: - - used in conjunction with msiname - you cannot specify msiversionstring only. - The msiversionstring can be found by looking at version property of the the win32_product object for the item. -author: Matt Martz / Trond Hindenes +author: Matt Martz ''' EXAMPLES = ''' @@ -62,7 +54,5 @@ EXAMPLES = ''' # Uninstall an MSI file - win_msi: path=C:\\\\7z920-x64.msi state=absent - -- win_msi: path=C:\\\\7z920-x64.msi msiname="myproduct" msiversionstring="3.2.0" ''' diff --git a/windows/win_msi.ps1 b/windows/win_msi.ps1 index 6f27e0eea34..1c2bc8a3019 100644 --- a/windows/win_msi.ps1 +++ b/windows/win_msi.ps1 @@ -24,88 +24,33 @@ $params = Parse-Args $args; $result = New-Object psobject; Set-Attr $result "changed" $false; -If (!($params.path)) +If (-not $params.path.GetType) { Fail-Json $result "missing required arguments: path" } -if (!(test-path $params.path)) -{ - Fail-Json $result "couldn't find a file at $($params.path)" -} - - -If ($params.extra_args) +$extra_args = "" +If ($params.extra_args.GetType) { $extra_args = $params.extra_args; } -Else -{ - $extra_args = "" -} -if ($params.MsiVersionString) +If ($params.creates.GetType -and $params.state.GetType -and $params.state -ne "absent") { - $MsiVersionString = $params.MsiVersionString -} - -if ($params.MsiName) -{ - $MsiName = $params.MsiName -} - -if (($MsiVersionString) -and (!($MsiName))) -{ - #If msiversionstring is specified, we need msiname as well - Fail-Json $result "missing required arguments: MsiName" -} - - -If (($params.creates) -and ($params.state -ne "absent")) -{ - If (Test-Path ($params.creates)) + If (Test-File $creates) { Exit-Json $result; } } -if ($MsiName) +$logfile = [IO.Path]::GetTempFileName(); +if ($params.state.GetType -and $params.state -eq "absent") { - $AlreadyInstalledMsi = Get-WmiObject -Query "Select * from win32_product" | where {$_.Name -eq $MsiName} -} -ElseIf (($MsiName) -and ($MsiVersionString)) -{ - $AlreadyInstalledMsi = Get-WmiObject -Query "Select * from win32_product" | where {($_.Name -eq $MsiName) -and ($_.version -eq $MsiVersionString)} -} -Else -{ - if ($params.state -eq "absent") - { - #existing msi check not specify, assume msi does exist - $AlreadyInstalledMsi = $true - } - if ($params.state -eq "present") - { - #existing msi check not specify, assume msi does exist - $AlreadyInstalledMsi = $false - } -} - -if (($AlreadyInstalledMsi) -and ($params.state -eq "absent")) -{ - #Already installed, perform uninstall msiexec.exe /x $params.path /qb /l $logfile $extra_args; } -Elseif((!$AlreadyInstalledMsi) -and ($params.state -eq "present")) -{ - #Not already installed, perform the install - $logfile = [IO.Path]::GetTempFileName(); - msiexec.exe /i $params.path /qb /l $logfile $extra_args; -} Else { - #Do nothing - Exit-Json $result; + msiexec.exe /i $params.path /qb /l $logfile $extra_args; } Set-Attr $result "changed" $true;