PembrokePSutilities.psm1

Write-Verbose 'Importing from [C:\projects\pembrokepsutilities\PembrokePSutilities\private]'
Write-Verbose 'Importing from [C:\projects\pembrokepsutilities\PembrokePSutilities\public]'
# .\PembrokePSutilities\public\Get-LocalPropertySet.ps1
function Get-LocalPropertySet {
    <#
    .DESCRIPTION
        This function will gather Key value pairs from a properties file.
    .PARAMETER PropertyFilePath
        A path is Required.
    .PARAMETER LOG_FILE
        A LOG_FILE is optional.
    .EXAMPLE
        Get-LocalPropertySet -PropertyFilePath c:\pps\qman\pembrokeps.properties
    .NOTES
        This file is generated during the deployment or Registration of tha Pembroke PS component.
    #>

    [CmdletBinding()]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseDeclaredVarsMoreThanAssignments", "")]
    [OutputType([System.Object[]])]
    param(
        [Parameter(Mandatory=$true)][string]$PropertyFilePath,
        [string]$LOG_FILE = "C:\temp\nolog.log"
    )
    if (Test-Path -Path $PropertyFilePath) {
        try
        {
            Write-LogLevel -Message "Gathering Local Properties" -Logfile "$LOG_FILE" -RunLogLevel CONSOLEONLY -MsgLevel CONSOLEONLY
            $PpsPropertiesHash = ConvertFrom-StringData (Get-Content $PropertyFilePath -raw)
            $PpsProperties = @()
            $PpsPropertiesHash | ForEach-Object {
                $result = New-Object psobject;
                foreach ($key in $_.keys) {
                    $result | Add-Member -MemberType NoteProperty -Name $key -Value $_[$key]
                 }
                 $PpsProperties += $result;
             }
        }
        catch
        {
            $ErrorMessage = $_.Exception.Message
            $FailedItem = $_.Exception.ItemName        
            Throw "Get-LocalPropertySet: $ErrorMessage $FailedItem"
        }
        $PpsProperties
    } else {
        Throw "Get-LocalPropertySet: Property File path: $PropertyFilePath does not exist."
    }
    
}
# .\PembrokePSutilities\public\Get-PpsProcessStatus.ps1
function Get-PpsProcessStatus {
    <#
    .DESCRIPTION
        This function will gather Key value pairs from a properties file.
    .PARAMETER ProcessName
        A path is Required.
    .EXAMPLE
        Get-PpsProcessStatus -ProcessName WmanKicker
    .NOTES
        This file will return true or false
    #>

    [CmdletBinding()]
    [OutputType([Boolean])]
    param(
        [Parameter(Mandatory=$true)][string]$ProcessName
    )
    try 
    {
        $ReturnData = Get-Process | Where-Object {($_.Name -eq "powershell") -and ($_.MainWindowTitle -like "*$ProcessName*")}
        $ReturnDataCount = ($ReturnData | Measure-Object).count
        If($ReturnDataCount -eq 1) {
            return $true
        } else {
            return $false
        }
    }
    catch
    {
        $ErrorMessage = $_.Exception.Message
        $FailedItem = $_.Exception.ItemName        
        Throw "Get-PpsProcessStatus: $ErrorMessage $FailedItem"
    }
}
    
# .\PembrokePSutilities\public\Invoke-InstallRequiredModuleSet.ps1
function Invoke-InstallRequiredModuleSet {
    <#
    .DESCRIPTION
        This function will Install additional Modules for a PembrokePS component.
    .PARAMETER RequiredModuleSet
        A RequiredModuleSet is Required.
    .EXAMPLE
        Invoke-InstallRequiredModuleSet -RequiredModuleSet "Powerlumber,PembrokePSrest"
    .NOTES
        This will Install additional Modules for a Workflow_Manager.
    #>

    [CmdletBinding()]
    [OutputType([Boolean])]
    param(
        [Parameter(Mandatory=$true)][string]$RequiredModuleSet
    )
    try
    {
        Write-Output "Checking for installation of required modules."
        $RequiredModuleList = $RequiredModuleSet.split(",")
        foreach ($RequiredModule in $RequiredModuleList){
            $localModuledataCount = (Get-Module -ListAvailable $RequiredModule | Measure-Object).count
            if($localModuledataCount -ge 1){
                Write-Output "Module: $RequiredModule is installed on this device."
            } else {
                Write-Output "Installing Required Module: $RequiredModule"
                Install-Module -Name $RequiredModule -Force
            }
        }
    }
    catch
    {
        $ErrorMessage = $_.Exception.Message
        $FailedItem = $_.Exception.ItemName        
        Throw "Invoke-InstallRequiredModuleSet: $ErrorMessage $FailedItem"
    }
}
    
# .\PembrokePSutilities\public\Invoke-Wait.ps1
function Invoke-Wait
{
    <#
    .DESCRIPTION
        This function will pause for the specified amount of time.
    .PARAMETER Seconds
        A valid integer is optional. Default is 10 seconds
    .EXAMPLE
        Invoke-Wait -Seconds 15
    .NOTES
        It's pretty simple.
    #>

    [CmdletBinding()]
    [OutputType([boolean])]
    param(
        [Int]$Seconds = 10
    )
    try
    {
        Write-output "Waiting $Seconds, Seconds"
        start-sleep -s $Seconds
    }
    catch
    {
        $ErrorMessage = $_.Exception.Message
        $FailedItem = $_.Exception.ItemName        
        Throw "Invoke-Wait: $ErrorMessage $FailedItem"
    }
}
Write-Verbose 'Importing from [C:\projects\pembrokepsutilities\PembrokePSutilities\classes]'