Public/Package.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
 <#
.SYNOPSIS
    Test for installed package.
.DESCRIPTION
    Test that a specified package is installed.
.PARAMETER Target
    Specifies the Display Name of the package to search for.
.PARAMETER Property
    Specifies an optional property to test for on the package.
.PARAMETER Should
    A Script Block defining a Pester Assertion.
.EXAMPLE
    package 'Microsoft Visual Studio Code' { should not BeNullOrEmpty }
.EXAMPLE
    package 'Microsoft Visual Studio Code' version { should be '1.1.0' }
.EXAMPLE
    package 'NonExistentPackage' { should BeNullOrEmpty }
.NOTES
    Assertions: Be, BeNullOrEmpty
#>
 
  
function Package {
    [CmdletBinding(DefaultParameterSetName="Default")]
    param(
        [Parameter(Mandatory, Position=1,ParameterSetName="Default")]
        [Parameter(Mandatory, Position=1,ParameterSetName="Property")]
        [Alias('Name')]
        [string]$Target,
        
        [Parameter(Position=2,ParameterSetName="Property")]
        [string]$Property,
        
        [Parameter(Mandatory, Position=2,ParameterSetName="Default")]
        [Parameter(Mandatory, Position=3,ParameterSetName="Property")]
        [scriptblock]$Should
    )
     
    $expression = {Get-Package -Name "$Target" -ErrorAction SilentlyContinue | Select-Object -First 1}
    
    $params = Get-PoshspecParam -TestName Package -TestExpression $expression @PSBoundParameters
    
    Invoke-PoshspecExpression @params
}