New-Item can create new things on any PowerShell drive, including the function: drive that holds all PowerShell functions.
If you’d like, you can define new functions dynamically inside your code. These new functions would then exist only in the scope where they were defined. To make them script-global, add the script: scope identifier. Here is an example:
function New-DynamicFunction { # creates a new function dynamically $Name = 'Test-NewFunction' $Code = { "I am a new function defined dynamically." Write-Host -ForegroundColor Yellow 'I can do whatever you want!' Get-Process } # create new function in function: drive and set scope to "script:" $null = New-Item -Path function: -Name "script:$Name" -Value $Code }
To test-drive this, run New-DynamicFunction. Once you did, there is a new function called Test-NewFunction:
# this function does not (yet) exist: PS> Test-NewFunction Test-NewFunction : The term 'Test-NewFunction' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. PS> New-DynamicFunction # now the function exists: PS> Test-NewFunction I am a new function defined dynamically. I can do whatever you want! Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName ------- ------ ----- ----- ------ -- -- ----------- 219 18 3384 10276 89,52 13088 1 AppleMobileDeviceProcess 574 35 29972 84500 3,50 8548 1 ApplicationFrameHost 147 9 1376 5644 4472 0 armsvc
Note how we defined the code of the new function as a script block in curly brackets. This is not required. You can also define it as plain-text string which may provide you with even more flexibility to compose the source code of your new function:
$a = "not" $b = "AD" $c = "EP" # use -Force to overwrite existing functions $null = New-Item -Force -Path function: -Name "script:Test-This" -Value @" 'Source code can be a string.' $a$c$b "@ Test-This
Note also that New-Item will not overwrite existing functions unless you specify -Force.