Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calling PowerShell function from command line

Tags:

powershell

cmd

Given the following say-hello.ps1 file on my file system:

function SayHello()
{
    return "Hello World!"
}

called on the command line like so (it will eventually run as a Windows Scheduled Task):

powershell -ExecutionPolicy unrestricted -command "& { c:\say-hello.ps1; SayHello }"

Why am I getting the following result?

SayHello : The term 'SayHello' 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:1 char:33
+ & { c:\say-hello.ps1; SayHello }
+                       ~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (SayHello:String) [], CommandNot
   FoundException
    + FullyQualifiedErrorId : CommandNotFoundException
like image 247
Mike Cole Avatar asked Mar 22 '23 04:03

Mike Cole


1 Answers

The scope of the script file c:\say-hello.ps1 ends when the script terminates. You can dot source the file (note the . before the PS1) if you would like its contents to run within the current scope -- the script block enclosed with curlies {...}:

powershell -ExecutionPolicy unrestricted -command "& { . c:\say-hello.ps1; SayHello }"
like image 93
jscott Avatar answered Mar 23 '23 18:03

jscott