New-Function.psm1
<# .SYNOPSIS Create a Global Function from input string, file or clipboard data .DESCRIPTION Create a Global Function from input string, file or clipboard data .NOTES Authors : Simon Godefroy - Simon.Godefroy@FocusedIT.co.uk Version : 1.0.5 Date : 2022.05.16 Update : 1.0.5 SG - 2022.05.16 Added -ScriptBlock Parameter Update : 1.0.4 SG - 2022.05.07 Updated Examples to include File parameter Update : 1.0.3 SG - 2022.05.07 Updated Description to include file Update : 1.0.2 SG - 2022.05.07 Added -File Parameter, Fixed ProcessFromClipboard Update : 1.0.1 SG - 2022.05.07 Initial Publish Update : 1.0.0 SG - 2022.05.07 Initial Script .LINK http://www.FocusedIT.co.uk #> function New-Function{ <# .SYNOPSIS Create a Global Function from input string, file or clipboard data .DESCRIPTION Create a Global Function from input string, file or clipboard data .EXAMPLE New-Function -Name "Invoke-TestScript" -Script `$Scriptblock Create a Global Function "Invoke-TestScript" from the data in variable Scriptblock .EXAMPLE New-Function -Name "Invoke-TestScript" -ProcessFromClipboard Create a Global Function "Invoke-TestScript" from the data in the clipboard .EXAMPLE New-Function -Name "Invoke-TestScript" -File .\Test.ps1 Create a Global Function "Invoke-TestScript" from the file .\Test.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(DefaultParameterSetName='String')] Param( [Parameter(ParameterSetName='String', Mandatory=$true)] [Parameter(ParameterSetName='Clipboard', Mandatory=$true)] [Parameter(ParameterSetName='Scriptblock', Mandatory=$true)] [string]$Name , [Parameter(ParameterSetName='String', Mandatory=$true)] [string]$ScriptString, [Parameter(ParameterSetName='Scriptblock', Mandatory=$true)] [scriptblock]$ScriptBlock, [string]$Description, [Parameter(ParameterSetName='Clipboard', Mandatory=$true)] [switch]$ProcessFromClipboard, [Parameter(ParameterSetName='File', Mandatory=$true)] [string]$File, [string]$Alias, [switch]$Quiet ) process{ if($ProcessFromClipboard){ try{ if(Get-Clipboard){ $ClipData = Get-Clipboard }else{ throw "Clipboard Empty or not text" } }catch{ Write-Error $global:Error[0] -ErrorAction Stop } $ClipData = $ClipData |?{$_ -notlike $null} $CommandData = $ClipData | Out-String $CmdScriptBlock = [Scriptblock]::Create($CommandData) } if($File){ try{ if($File -notlike "*.ps1"){ throw "File not PS1" } } catch { Write-Error $Error[0] -ErrorAction Stop } try{ if(!(Test-Path $File)){ throw "File not found ($File)" } } catch { Write-Error $Error[0] -ErrorAction Stop } $FileDetails = Get-Item $File $CommandName = (($FileDetails.Name).SubString(0,$FileDetails.Name.LastIndexOf('.'))) $CommandString = Get-Content $File -Raw $CmdScriptBlock = [Scriptblock]::Create($CommandString) } if($ScriptString){ $CmdScriptBlock = [Scriptblock]::Create($ScriptString) } if($ScriptBlock){ $CmdScriptBlock = $ScriptBlock } Set-Item Function:global:$Name -Value $CmdScriptBlock -Force if($Alias){ Set-Alias $Alias $Name -Scope Global -Force } if(!($Quiet)){ Write-Output $Name if($Description){ Write-Output "($Description)" } } } } |