[powershell] Pass parameter from a batch file to a PowerShell script

In my batch file, I call the PowerShell script like this:

powershell.exe "& "G:\Karan\PowerShell_Scripts\START_DEV.ps1"

Now, I want to pass a string parameter to START_DEV.ps1. Let's say the parameter is w=Dev.

How can I do this?

This question is related to powershell batch-file

The answer is

When a script is loaded, any parameters that are passed are automatically loaded into a special variables $args. You can reference that in your script without first declaring it.

As an example, create a file called test.ps1 and simply have the variable $args on a line by itself. Invoking the script like this, generates the following output:

PowerShell.exe -File test.ps1 a b c "Easy as one, two, three"
Easy as one, two, three

As a general recommendation, when invoking a script by calling PowerShell directly I would suggest using the -File option rather than implicitly invoking it with the & - it can make the command line a bit cleaner, particularly if you need to deal with nested quotes.

Assuming your script is something like the below snippet and named testargs.ps1

param ([string]$w)
Write-Output $w

You can call this at the commandline as:

PowerShell.Exe -File C:\scripts\testargs.ps1 "Test String"

This will print "Test String" (w/o quotes) at the console. "Test String" becomes the value of $w in the script.

Add the parameter declaration at the top of ps1 file


  # Our preferred encoding
  [string]$Encoding = "UTF8"

write ("Encoding : {0}" -f $Encoding)


C:\temp> .\test.ps1 -Encoding ASCII
Encoding : ASCII

The answer from @Emiliano is excellent. You can also pass named parameters like so:

powershell.exe -Command 'G:\Karan\PowerShell_Scripts\START_DEV.ps1' -NamedParam1 "SomeDataA" -NamedParam2 "SomeData2"

Note the parameters are outside the command call, and you'll use: