New-Function.psm1
<# .SYNOPSIS Create a Global Function from input string or clipboard data .DESCRIPTION Create a Global Function from input string or clipboard data .NOTES Authors : Simon Godefroy - Simon.Godefroy@FocusedIT.co.uk Version : 1.0.1 Date : 2022.05.07 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 or clipboard data .DESCRIPTION Create a Global Function from input string 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 .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)] [string]$Name , [Parameter(ParameterSetName='String', Mandatory=$true)] [string]$ScriptString, [string]$Description, [Parameter(ParameterSetName='Clipboard', Mandatory=$true)] [switch]$ProcessFromClipboard, [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) } $CmdScriptBlock = [Scriptblock]::Create($ScriptString) 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)" } } } } |