Home > Mobile >  How to pass the full path of a file as an argument to a new instance of Powershell?
How to pass the full path of a file as an argument to a new instance of Powershell?

Time:02-04

This is the code of my script that calls another script:

$LocalFolder = "$env:USERPROFILE\Desktop\Banana Productions"
$RenderClient = "$LocalFolder\Render\Modelo 02\Cliente 02"
$CutFolder = "$RenderClient\Cortar"
$FFMpegScript = "$CutFolder\ffmpeg crop.ps1" 

gci "$RenderClient\Cortar" *.mp4 -File -Recurse | ForEach-Object {
$FilePath = $_.FullName
start PowerShell "-NoExit", "-File", "`"$FFMpegScript`"", "$FilePath"
Write-Host $FilePath
}

The issue is that I am not able to pass the argument with the value of $_.FullName to the new instance, I get an error message in the new instance with the message:

Cannot process argument because the value of argument "name" is not valid

This is all that's in the script I'm calling:

param($args)

Write-Host $args[0]

Read-Host -Prompt "Press Enter to continue"

How can I resolve this?

CodePudding user response:

Due to a long-standing bug in Start-Process - see GitHub issue #5576 - it is best to pass a single string argument to the (positionally implied) -ArgumentList parameter, which allows you to control the process command line explicitly:

The following uses an expandable here-string for syntactic convenience:

Get-ChildItem "$RenderClient\Cortar" -Filter *.mp4 -File -Recurse |
  ForEach-Object {
    $FilePath = $_.FullName
    Start-Process PowerShell @"
-NoExit -File "$FFMpegScript" "$FilePath"
"@ # Note: This must be at the very start of the line.
  }

Additionally, do not use the automatic $args variable as a custom variable.

In fact, if you want your script to receive positional arguments only, there is no need for a formal param(...) declaration - just use the array-valued $args variable as-is:

# Without a param(...) declaration, $args *implicitly* contains
# any arguments passed, as an array.

$args[0] # output the 1st argument passed.

Read-Host -Prompt "Press Enter to continue"
  • Related