DSCResources/MSFT_xJeaToolkit/MSFT_xJeaToolkit.psm1
#requires -version 5 #region HelperFunctions Import-Module $PSScriptRoot\..\Library\Helper.psm1 Import-Module $PSScriptRoot\..\Library\JeaDir.psm1 Import-Module $PSScriptRoot\..\Library\JeaProxy.psm1 # Internal function to throw terminating error with specified errroCategory, errorId and errorMessage function Get-TargetResource { [CmdletBinding()] [OutputType([System.Collections.Hashtable])] param ( [parameter(Mandatory = $true)] [System.String] $Name ) try { write-Verbose "$((get-date).GetDateTimeFormats()[112]) Start Get [Toolkit]$Name" $modulePath = (Join-Path (Join-Path (Get-JeaDir) 'Toolkit') "$($name)-ToolKit.psm1") Write-Verbose "Importing [JeaToolKit]$modulePath" Import-Module $modulePath -Force -DisableNameChecking -Verbose:0 $module = Microsoft.PowerShell.Core\Get-Module -Name "$name-Toolkit" Write-Verbose "Module= $module " $returnValue = @{ Name = [System.String]"$name-Toolkit" CommandSpecs = [String]$( $csvPath = (Join-Path (Join-Path (Get-JeaDir) 'Toolkit') "$($name)-CommandSpecs.csv") if (test-path $csvPath) { Microsoft.PowerShell.Management\get-content -Path $csvPath -Raw } ) Applications = [System.String[]] $( &$Module{$ExportedApplications} ) Ensure = [System.String]'Present' } Microsoft.PowerShell.Core\remove-module "$Name-Toolkit" -Verbose:0 $returnValue }catch { write-Debug "ERROR: $($_|fl * -force|out-string)" New-TerminatingError -errorId 'GetToolkitFailed' -errorMessage $_.Exception -errorCategory InvalidOperation }finally { write-Verbose "$((get-date).GetDateTimeFormats()[112]) Done Get [JeaToolkit]$name" } } function Set-TargetResource { [CmdletBinding()] param ( [parameter(Mandatory = $true)] [System.String] $Name, [String] $CommandSpecs, [System.String[]] $Applications, [System.String[]] $ScriptDirectory, [ValidateSet('Present','Absent')] [System.String] $Ensure = 'Present' ) try { write-Verbose "$((get-date).GetDateTimeFormats()[112]) Start Set [Toolkit]$Name" Assert-JeaDirectory Export-JEAProxy -Name $name -CommandSpecs $CommandSpecs -Applications $Applications } catch { Write-Verbose $($_ |fl * -force |Out-String) $msg = "$($_.exception) `nTarget: $($_.TargetObject)`n$($_.ScriptStacktrace)" New-TerminatingError -errorId $($_.FullqualifiedId + 'JeaToolKitSet') -ErrorMessage $msg -errorCategory OperationStopped }finally { write-Verbose "$((get-date).GetDateTimeFormats()[112]) Done Set [Toolkit]$Name" } return $true } function Test-TargetResource { [CmdletBinding()] [OutputType([System.Boolean])] param ( [parameter(Mandatory = $true)] [System.String] $Name, [String] $CommandSpecs, [System.String[]] $Applications, [System.String[]] $ScriptDirectory, [ValidateSet('Present','Absent')] [System.String] $Ensure = 'Present' ) try { write-Verbose "$((get-date).GetDateTimeFormats()[112]) Start Test [JeaToolkit]$name" $toolkit = Join-Path (Get-JeaToolKitDir) "$($Name)-ToolKit.psm1" $CommandSpec = Join-Path (Get-JeaToolKitDir) "$($Name)-CommandSpecs.csv" $Exists = ((Test-Path $Toolkit) -AND (Test-Path $CommandSpec)) if ($Exists) { Write-Verbose " [JeaToolkit]$name Present"} else { Write-Verbose " [JeaToolkit]$name Absent"} if (($Ensure -eq 'Present' -and !$exists) -or ($Ensure -eq 'Absent' -And $exists)) { return $false } if ($Ensure -eq 'Present' -and ($CommandSpecs.Trim() -ne (Get-Content $CommandSpec -Raw).Trim())) { return $false } return $true }catch { write-Debug "ERROR: $($_|fl * -force|out-string)" New-TerminatingError -errorId 'TestToolkitFailed' -errorMessage $_.Exception -errorCategory InvalidOperation }finally { write-Verbose "$((get-date).GetDateTimeFormats()[112]) Done Test [JeaToolkit]$name" } } #Test-TargetResource Export-ModuleMember -Function *-TargetResource |