Passing variable arguments using PowerShell's Start-Process cmdlet

Mike picture Mike · Aug 11, 2016 · Viewed 12.9k times · Source

Good evening everyone,

I'm using a command line that passes arguments to as variables in the following scripts to be run in another ps1 that I'm calling from within this script. Whenever I try to pass the arguments from the command line I get the following error though

Start-Process : A positional parameter cannot be found that accepts argument

Would anyone be able to assist?
Thank you for your time and much appreciate any help.

param
(
    [string]$targetserver = $args[0], #target server
    [string]$module = $args[1], #module name
)

function Get-Script-Directory
{    
  return Split-Path $script:MyInvocation.MyCommand.Path
}

Start-Process powershell.exe (Join-Path (Get-Script-Directory) "...\StopServices.ps1") -ArgumentList $targetserver $module

Answer

DAXaholic picture DAXaholic · Aug 11, 2016

Try this for the last line

$scriptPath = Join-Path (Get-Script-Directory) "...\StopServices.ps1"
Start-Process powershell.exe -ArgumentList "-file $scriptPath", $targetserver, $module  

Update due to comment: To show you that it is working see the GIF below - so you may check it again or insert some debug output to see where things go wrong with your script

GIF showing working solution