Classes/ParcelScripts.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
82
class ParcelScripts
{
    hidden [string] $PreInstallScript
    hidden [string] $PreUninstallScript

    hidden [string] $PostInstallScript
    hidden [string] $PostUninstallScript

    ParcelScripts([object]$_pre, [object]$_post)
    {
        if ($null -eq $_pre) {
            $_pre = [string]::Empty
        }

        if ($null -eq $_post) {
            $_post = [string]::Empty
        }

        # pre scripts
        if ($_pre -is [string]) {
            $this.PreInstallScript = $_pre
            $this.PreUninstallScript = $_pre
        }
        else {
            $this.PreInstallScript = $_pre.install
            $this.PreUninstallScript = $_pre.uninstall
        }

        # post scripts
        if ($_post -is [string]) {
            $this.PostInstallScript = $_post
            $this.PostUninstallScript = $_post
        }
        else {
            $this.PostInstallScript = $_post.install
            $this.PostUninstallScript = $_post.uninstall
        }
    }

    [void] PreInstall([bool]$_dryRun)
    {
        $this.InvokeScript($this.PreInstallScript, $_dryRun) | Out-Null
    }

    [void] PostInstall([bool]$_dryRun)
    {
        $this.InvokeScript($this.PostInstallScript, $_dryRun) | Out-Null
    }

    [void] PreUninstall([bool]$_dryRun)
    {
        $this.InvokeScript($this.PreUninstallScript, $_dryRun) | Out-Null
    }

    [void] PostUninstall([bool]$_dryRun)
    {
        $this.InvokeScript($this.PostUninstallScript, $_dryRun) | Out-Null
    }

    hidden [void] InvokeScript([string]$_script, [bool]$_dryRun)
    {
        if ($_dryRun) {
            return
        }

        # do nothing if no script
        if ([string]::IsNullOrWhiteSpace($_script)) {
            return
        }

        # if we have a script, then attempt to invoke it
        $output = [string]::Empty

        try {
            $output = Invoke-Expression -Command $_script -ErrorAction Stop
        }
        catch {
            $output | Out-Default
            throw $_.Exception
        }
    }
}