Functions/Private/Artifacts/MSMQ/Discover_MSMQ.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
function Discover_MSMQ {
<#
.SYNOPSIS
Scans for presence of the MSMQ Windows feature
 
.PARAMETER MountPath
The path where the Windows image was mounted to.
 
.PARAMETER OutputPath
The filesystem path where the discovery manifest will be emitted.
#>

[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSShouldProcess",'')]
[CmdletBinding()]
param (
    [Parameter(Mandatory = $true)]
    [string] $MountPath,
    [Parameter(Mandatory = $true)]
    [string] $OutputPath
)

$ArtifactName = Split-Path -Path $PSScriptRoot -Leaf
Write-Verbose -Message ('Started discovering {0} artifact' -f $ArtifactName)

### Path to the manifest
$Manifest = '{0}\{1}.json' -f $OutputPath, $ArtifactName

### Create a HashTable to store the results (this will get persisted to JSON)
$ManifestResult = @{
    Name = 'MSMQ'
    FeatureName = ''
    Status = ''
}

$MsmqFeatures = Get-WindowsOptionalFeature -FeatureName MSMQ* -Path $MountPath 
$EnabledFeatures = $MsmqFeatures.Where{$_.State -eq 'Enabled'}
if ($EnabledFeatures.Count -gt 0) {
    Write-Verbose -Message 'MSMQ service is present'
    $ManifestResult.Status = 'Present'
    $FeaturesToExport = $enabledFeatures | Sort-Object FeatureName | Select-Object -ExpandProperty FeatureName
    $ManifestResult.FeatureName = $FeaturesToExport  -join ';'
}
else {
    Write-Verbose -Message 'MSMQ service was not found'
    $ManifestResult.Status = 'Absent'
}

### Write the result to the manifest file
$ManifestResult | ConvertTo-Json | Set-Content -Path $Manifest

Write-Verbose -Message ('Finished discovering {0} artifact' -f $ArtifactName)
}