New-FunctionFromPS1.ps1


<#
.SYNOPSIS
    New-FunctionFromPS1 - Short Synopsis
.DESCRIPTION
    New-FunctionFromPS1 - Description
.EXAMPLE
    New-FunctionFromPS1.ps1
.NOTES
    Author : Simon Godefroy - Simon.Godefroy@FocusedIT.co.uk
    Version : 1.0.0
    Date : 2022.05.07
        Update : 1.0.0
                    SG - 2022.05.07
                    Initial Script
.LINK
    http://www.FocusedIT.co.uk
#>


[CmdletBinding()]
Param(
    #[Alias("","")]
    #[Parameter(Position=0,Mandatory=$false,ValueFromPipeline=$false,ValueFromPipelineByPropertyName=$false)]
    #[string]$String #,
    #[Alias("","")]
    #[Parameter(Position=1,Mandatory=$false,ValueFromPipeline=$false,ValueFromPipelineByPropertyName=$false)]
    #[switch]$Switch #,
)

begin{

}

process{
function New-FunctionFromPS1{
    [CmdletBinding()]
    Param(
        [string]$Path ,
        [string]$Description,
        [switch]$Quiet,
        [string]$Alias
    )
    
    try{
        if($Path -notlike "*.ps1"){
            throw "File not PS1"
        }
    } catch {
        Write-Error $Error[0] -ErrorAction Stop
    }
    try{
        if(!(Test-Path $Path)){
            throw "File not found ($Path)"
        }
    } catch {
        Write-Error $Error[0] -ErrorAction Stop
    }
    
    $FileDetails = Get-Item $Path
    #$CommandName = (($FileDetails.Name) -Split ".ps1")[0]
    $CommandName = (($FileDetails.Name).SubString(0,$FileDetails.Name.LastIndexOf('.')))
    $CommandString = Get-Content $Path -Raw
    $CmdScriptBlock = [Scriptblock]::Create($CommandString)
    Set-Item Function:global:$CommandName -Value $CmdScriptBlock -Force
    if($Alias){
        Set-Alias $Alias $CommandName -Scope Global -Force
    }
    if(!($Quiet)){
    Write-Host $CommandName -NoNewLine
        if($Description){
            Write-Host " ($Description)" -ForegroundColor Cyan
        } else {
            Write-Host ""
        }
    }
}
}

end{

}