Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Powershell start-job -scriptblock cannot recognize the function defined in the same file?

Tags:

People also ask

How do you call a function in a ps1 file?

If you are not able to find your function or you want to call the function then you need to load your . ps1 file which contains the definition of the function; try this command: ". Full path\filename. ps1".

How do you call a user defined function in PowerShell?

A function in PowerShell is declared with the function keyword followed by the function name and then an open and closing curly brace. The code that the function will execute is contained within those curly braces.

How do you call a function from another PowerShell script?

How to call a function: The inline approach. The easiest way to work with a PowerShell function is to include it in the script. The term for this is an inline function. Wherever the code is for the function, it must go above the first line that calls the function.

What is $PSScriptRoot in PowerShell?

$PSScriptRootContains the full path of the executing script's parent directory. In PowerShell 2.0, this variable is valid only in script modules ( . psm1 ). Beginning in PowerShell 3.0, it's valid in all scripts.


I have the following code.

function createZip
{
Param ([String]$source, [String]$zipfile)
Process { echo "zip: $source`n     --> $zipfile" }
}

try {
    Start-Job -ScriptBlock { createZip "abd" "acd" } 
}
catch {
    $_ | fl * -force
}
Get-Job | Wait-Job 
Get-Job | receive-job 
Get-Job | Remove-Job 

However, the script returns the following error.

Id              Name            State      HasMoreData     Location             Command                  
--              ----            -----      -----------     --------             -------                  
309             Job309          Running    True            localhost            createZip "a...
309             Job309          Failed     False           localhost            createZip "a...
Receive-Job : The term 'createZip' 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.
At line:17 char:22
+ Get-Job | receive-job <<<<  
    + CategoryInfo          : ObjectNotFound: (function:createZip:String) [Receive-Job], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

It seems the function name cannot be recognized inside the script block of start-job. I tried function:createZip too.