WisherTools.Helpers.psm1

#Region './Classes/1.class1.ps1' -1

class Class1
{
    [string]$Name = 'Class1'

    Class1()
    {
        #default Constructor
    }

    [String] ToString()
    {
        # Typo "calss" is intentional
        return ( 'This calss is {0}' -f $this.Name)
    }
}
#EndRegion './Classes/1.class1.ps1' 16
#Region './Classes/2.class2.ps1' -1

class Class2
{
    [string]$Name = 'Class2'

    Class2()
    {
        #default constructor
    }

    [String] ToString()
    {
        return ( 'This calss is {0}' -f $this.Name)
    }
}
#EndRegion './Classes/2.class2.ps1' 15
#Region './Classes/3.class11.ps1' -1

class Class11 : Class1
{
    [string]$Name = 'Class11'

    Class11 ()
    {
    }

    [String] ToString()
    {
        return ( 'This calss is {0}:{1}' -f $this.Name,'class1')
    }
}
#EndRegion './Classes/3.class11.ps1' 14
#Region './Classes/4.class12.ps1' -1

class Class12 : Class1
{
    [string]$Name = 'Class12'

    Class12 ()
    {
    }

    [String] ToString()
    {
        return ( 'This calss is {0}:{1}' -f $this.Name,'class1')
    }
}
#EndRegion './Classes/4.class12.ps1' 14
#Region './Public/Get-BackupFilePath.ps1' -1

function Get-BackupFilePath {
    param (
        [string]$BackupDirectory = "C:\LHStuff\UserProfileTools\RegProfBackup",
        [string]$Prefix = "ProfileListBackup"
    )

    # Generate a unique backup file name with timestamp
    $dateTimeStamp = (Get-Date -Format "yyyyMMdd_HHmmss")
    $backupFileName = "$Prefix`_$dateTimeStamp.reg"
    $backupPath = Join-Path -Path $BackupDirectory -ChildPath $backupFileName

    return $backupPath
}
#EndRegion './Public/Get-BackupFilePath.ps1' 14
#Region './Public/Get-DirectoryPath.ps1' -1

function Get-DirectoryPath {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [string]$BasePath,

        [Parameter(Mandatory = $true)]
        [string]$ComputerName,

        [Parameter(Mandatory = $true)]
        [bool]$IsLocal  # Determines whether to return local or UNC format
    )

    if ($IsLocal) {
        # Convert UNC to local format
        $localPath = $BasePath -replace '(?:.+)\\([a-zA-Z])\$\\', '$1:\'
        return $localPath
    }
    else {
        # Convert local path to UNC format
        $uncPath = $BasePath -replace '^([a-zA-Z]):\\', "\\$ComputerName\`$1`$\"
        return $uncPath
    }
}
#EndRegion './Public/Get-DirectoryPath.ps1' 25
#Region './Public/Get-FunctionScriptBlock.ps1' -1

function Get-FunctionScriptBlock {
    param (
        [string]$FunctionName
    )

    try {
        # Get the current definition (body) of the specified function dynamically
        $functionBody = (Get-Command -Name $FunctionName).Definition

        if (-not $functionBody) {
            throw "Function '$FunctionName' does not exist."
        }

        # Create the full function definition as a script block
        $fullFunctionScript = @"
function $FunctionName {
    $functionBody
}
"@


        return $fullFunctionScript
    } catch {
        Write-Error "Failed to retrieve the function '$FunctionName'. Error: $_"
        return $null
    }
}
#EndRegion './Public/Get-FunctionScriptBlock.ps1' 27
#Region './Public/Test-ComputerPing.ps1' -1

function Test-ComputerPing {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [string]$ComputerName,

        [Parameter(Mandatory = $false)]
        [int]$Timeout = 2000  # Default timeout is 4000 ms (4 seconds)
    )

    try {
        # Build the filter query to include the address and timeout
        $query = "Address='$ComputerName' AND Timeout=$Timeout"

        # Use Get-CimInstance to ping the computer with a timeout
        $pingResult = Get-CimInstance -ClassName Win32_PingStatus `
            -Filter $query -ErrorAction Stop

        # Check if the ping status is 0 (successful ping)
        if ($pingResult.StatusCode -eq 0) {
            Write-Verbose "Computer '$ComputerName' is online."
            return $true
        } else {
            Write-Verbose "Computer '$ComputerName' is offline or unreachable (StatusCode: $($pingResult.StatusCode))."
            return $false
        }
    } catch {
        Write-Verbose "Failed to ping computer '$ComputerName'. Error: $_"
        return $false
    }
}
#EndRegion './Public/Test-ComputerPing.ps1' 32
#Region './Public/Test-DirectoryExists.ps1' -1

function Test-DirectoryExists {
    param (
        [string]$Directory
    )

    if (-not (Test-Path $Directory)) {
        New-Item -Path $Directory -ItemType Directory -Force | Out-Null
    }
}
#EndRegion './Public/Test-DirectoryExists.ps1' 10