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{ } |