6

I want to start a script1.ps1 out of an other script with arguments stored in a variable.

$para = "-Name name -GUI -desc ""this is the description"" -dryrun"
. .\script1.ps1 $para

The args I get in script1.ps1 looks like:

args[0]: -Name name -GUI -desc "this is the description" -dryrun

so this is not what I wanted to get. Has anyone a idea how to solve this problem?
thx lepi

PS: It is not sure how many arguments the variable will contain and how they are going to be ranked.

2 Answers 2

7

You need to use splatting operator. Look at powershell team blog or here at stackoverflow.com.

Here is an example:

@'
param(
  [string]$Name,
  [string]$Street,
  [string]$FavouriteColor
)
write-host name $name
write-host Street $Street
write-host FavouriteColor $FavouriteColor
'@ | Set-Content splatting.ps1

# you may pass an array (parameters are bound by position)
$x = 'my name','Corner'
.\splatting.ps1 @x

# or hashtable, basically the same as .\splatting -favouritecolor blue -name 'my name'
$x = @{FavouriteColor='blue'
  Name='my name'
}
.\splatting.ps1 @x

In your case you need to call it like this:

$para = @{Name='name'; GUI=$true; desc='this is the description'; dryrun=$true}
. .\script1.ps1 @para
Sign up to request clarification or add additional context in comments.

2 Comments

I'm glad I helped. If you are satisfied with the answer(s), you can close the questions by accepting the answer ;)
Where the splatting operator? There's no operator here this just happens to be the way PowerShell processes the commands... i.e. it's a feature, not an operator.
5

Using Invoke-Expression is another aternative:

$para = '-Name name -GUI -desc "this is the description" -dryrun'
Invoke-Expression -Command ".\script1.ps1 $para"

1 Comment

thx, the result is at the end the same but this is the real nice and short variant!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.