jpsider.psm1

Write-Verbose 'Importing from [C:\projects\jpsider\jpsider\private]'
# .\jpsider\private\Disable-SSLValidation.ps1
function Disable-SSLValidation
{
    <#
    .SYNOPSIS
        Disables SSL certificate validation
    .DESCRIPTION
        Disable-SSLValidation disables SSL certificate validation by using reflection to implement the System.Net.ICertificatePolicy class.
        Author: Matthew Graeber (@mattifestation)
        License: BSD 3-Clause
    .NOTES
        Reflection is ideal in situations when a script executes in an environment in which you cannot call csc.ese to compile source code.
        If compiling code is an option, then implementing System.Net.ICertificatePolicy in C# and Add-Type is trivial.
    .EXAMPLE
        Disable-SSLValidation
    .LINK
        http://www.exploit-monday.com
    #>

    Set-StrictMode -Version 2
    # You have already run this function if ([System.Net.ServicePointManager]::CertificatePolicy.ToString() -eq 'IgnoreCerts') { Return }
    $Domain = [AppDomain]::CurrentDomain
    $DynAssembly = New-Object System.Reflection.AssemblyName('IgnoreCerts')
    $AssemblyBuilder = $Domain.DefineDynamicAssembly($DynAssembly, [System.Reflection.Emit.AssemblyBuilderAccess]::Run)
    $ModuleBuilder = $AssemblyBuilder.DefineDynamicModule('IgnoreCerts', $false)
    $TypeBuilder = $ModuleBuilder.DefineType('IgnoreCerts', 'AutoLayout, AnsiClass, Class, Public, BeforeFieldInit', [System.Object], [System.Net.ICertificatePolicy])
    $TypeBuilder.DefineDefaultConstructor('PrivateScope, Public, HideBySig, SpecialName, RTSpecialName') | Out-Null
    $MethodInfo = [System.Net.ICertificatePolicy].GetMethod('CheckValidationResult')
    $MethodBuilder = $TypeBuilder.DefineMethod($MethodInfo.Name, 'PrivateScope, Public, Virtual, HideBySig, VtableLayoutMask', $MethodInfo.CallingConvention, $MethodInfo.ReturnType, ([Type[]] ($MethodInfo.GetParameters() | ForEach-Object {$_.ParameterType})))
    $ILGen = $MethodBuilder.GetILGenerator()
    $ILGen.Emit([Reflection.Emit.Opcodes]::Ldc_I4_1)
    $ILGen.Emit([Reflection.Emit.Opcodes]::Ret)
    $TypeBuilder.CreateType() | Out-Null

    # Disable SSL certificate validation
    [System.Net.ServicePointManager]::CertificatePolicy = New-Object IgnoreCerts
    return $true
}

Write-Verbose 'Importing from [C:\projects\jpsider\jpsider\public]'
# .\jpsider\public\Open-ConsoleWindow.ps1
function Open-ConsoleWindow
{
    <#
    .SYNOPSIS
        Opens a specified number of Console Windows.
    .DESCRIPTION
        Opens a specified number of Console Windows.
    .PARAMETER Count
        Please provide a new Console Title.
    .PARAMETER Executable
        Please provide an Executable. (Powershell.exe is default)
    .EXAMPLE
        Open-ConsoleWindow -Count 2 -Executable PowerShell.exe
    .EXAMPLE
        Open-ConsoleWindow -Count 2 -Executable pwsh.exe
    .LINK
        http://www.invoke-automation.blog
    .NOTES
        none
    #>

    [CmdletBinding(
        SupportsShouldProcess = $true,
        ConfirmImpact = "Low"
    )]
    [OutputType([String])]
    [OutputType([Boolean])]
    param(
        [Parameter(Mandatory = $true)][int]$Count,
        [ValidateSet("PowerShell.exe", "pwsh.exe")]
        [Parameter(Mandatory = $false)][string]$Executable = "PowerShell.exe"
    )
    if ($pscmdlet.ShouldProcess("Starting Open-ConsoleWindow function."))
    {
        try
        {
            $thisCount = 1
            do {
                Write-Output "Opening Conosle Window: $thisCount"
                if ($Executable -like 'PowerShell.exe'){
                    Start-Process -WindowStyle Normal "$Executable" "-NoExit Update-ConsoleTitle -Title Console:$thisCount"
                } else {
                    Start-Process -WindowStyle Normal "$Executable"
                }
                $thisCount++
            } while ($thisCount -le $Count)
        }
        catch
        {
            $ErrorMessage = $_.Exception.Message
            $FailedItem = $_.Exception.ItemName
            Throw "Open-ConsoleWindow: $ErrorMessage $FailedItem"
        }
    }
    else
    {
        # -WhatIf was used.
        return $false
    }
}
# .\jpsider\public\Reset-Module.ps1
function Reset-Module
{
    <#
    .SYNOPSIS
        Updates a module, and Re-imports it.
    .DESCRIPTION
        Updates a module, and Re-imports it.
    .PARAMETER Name
        Please provide a valid module Name.
    .EXAMPLE
        Reset-Module -Name VMware.PowerCLI
    .LINK
        http://www.invoke-automation.blog
    .NOTES
        none
    #>

    [CmdletBinding(
        SupportsShouldProcess = $true,
        ConfirmImpact = "Low"
    )]
    [OutputType([String])]
    [OutputType([Boolean])]
    param(
        [Parameter(Mandatory = $true)][string]$Name
    )
    if ($pscmdlet.ShouldProcess("Starting Reset-Module function."))
    {
        try
        {
            # Remove the Module from the Session/Console
            Write-Output "Removing Module $Name from Console/Session."
            Remove-Module -Name $Name -Force -Confirm:$false

            # Update the Module
            Write-Output "Updating Module $Name"
            Update-Module -Name $Name -Force -Confirm:$false

            # Import the Module to the Session/Console
            Write-Output "Importing Module $Name to Console/Session."
            Import-Module -Name $Name -Force
        }
        catch
        {
            $ErrorMessage = $_.Exception.Message
            $FailedItem = $_.Exception.ItemName
            Throw "Reset-Module: $ErrorMessage $FailedItem"
        }
    }
    else
    {
        # -WhatIf was used.
        return $false
    }
}
# .\jpsider\public\Update-ConsoleTitle.ps1
function Update-ConsoleTitle
{
    <#
    .SYNOPSIS
        Changes the title in the Console.
    .DESCRIPTION
        Update-ConsoleTitle changes the title in the Console.
    .PARAMETER Title
        Please provide a new Console Title.
    .NOTES
        none
    .EXAMPLE
        Update-ConsoleTitle -Title "My New Title"
    .LINK
        http://www.invoke-automation.blog
    #>

    [CmdletBinding(
        SupportsShouldProcess = $true,
        ConfirmImpact = "Low"
    )]
    [OutputType([String])]
    [OutputType([Boolean])]
    param(
        [Parameter(Mandatory = $true)][String]$Title
    )
    if ($pscmdlet.ShouldProcess("Starting Update-ConsoleTitle function."))
    {
        try
        {
            Write-Output "Updating Console title to: $Title"
            $Host.UI.RawUI.WindowTitle = "$Title"
        }
        catch
        {
            $ErrorMessage = $_.Exception.Message
            $FailedItem = $_.Exception.ItemName
            Throw "Update-ConsoleTitle: $ErrorMessage $FailedItem"
        }
    }
    else
    {
        # -WhatIf was used.
        return $false
    }
}
Write-Verbose 'Importing from [C:\projects\jpsider\jpsider\classes]'