Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Do powershell parameters need to be at the front of the script?

I'm trying to have a script with both executable code and a function, like the following:

function CopyFiles {
 Param( ... )
...
}

// Parameter for the script
param ( ... ) 

// Executable code

However, I run into the following error: "The assignment expression is not valid. The input to an assignment operator must be an object that is able to accept assignments, such as a variable or a property"

When I list my function at the end of the file, it says that the function name is undefined. How do I call a powershell function from executable code within the same script?

like image 744
fobbymaster Avatar asked Dec 25 '22 04:12

fobbymaster


2 Answers

The correct order is:

1.Script parameters

# Parameter for the script
param([string]$foo) 

2.Function definitons

function CopyFiles {
    Param([string]$bar)
    ...
}

3.Script code

# Executable code
CopyFiles $foo $bar

Why would you want it any other way?

like image 157
Alexander Obersht Avatar answered Jan 18 '23 23:01

Alexander Obersht


Parameters go first always. I had a similar issue at one point in time with providing parameter input to a script. Your script should go:

param ( . . . )
# functions
# script body

For some reason, the PowerShell parsing engine doesn't appreciate the param keyword not being on the first line of a script, not counting comment lines. You can also do this:

param (
# params must be at the top of the file
)

You can also check to see if your parameters have been declared, or if they have the input you want, using Get-Variable. One other thing; if you want to cast data to a certain type, such as System.Boolean, I would do it AFTER the param block, and BEFORE functions. If you type-cast something to System.Boolean in the parameter declaration, then you'll have errors if people running your script don't submit the input argument in a Boolean value, which is much harder than using the .NET System.Convert static method to convert the value afterwards, and checking to see what it evaluated to.

like image 45
PSGuy Avatar answered Jan 18 '23 23:01

PSGuy