1

I call the python code from a Powershell script in order to loop over some arguments. Calling the python script from a Powershell is straight forward and works without a hitch:

PS C:\Windows\system32> C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\python.exe C:\Users\Administrator\AppData\Local\Programs\youtube-upload-master\bin\youtube-upload C:\Users\Administrator\Documents\timelapse\videos\timelapse_10.0.0.51-2016-06-21.mp4 --client-secrets=C:\Users\Administrator\Documents\timelapse\credentials\.yt-ul-ioa-secr.json --credentials-file=C:\Users\Administrator\Documents\timelapse\credentials\.yt-ul-ioa-cred.json --title="Timelapse 21.06.2016" --playlist "Timelapses June 2016"

Then within a script I am changing the parameters inserting variables into the argument strings, and finally calling the whole thing with Invoke-Command:

# yt-ul.ps1
param(
    #[switch]$all_cams = $false,
    [int]$days = -1,
    [string]$cam = "ioa"
)

$cam_ip_hash = @{
    "ioa" = "10.0.0.51"; 
    "pam" = "10.0.0.52";
    "biz" = "10.0.0.56";
    "prz" = "10.160.58.25";
    "igu" = "10.160.38.35"}


$cam_ip = $cam_ip_hash[$cam]
$date = (Get-Date).AddDays($days).ToString("yyyy-MM-dd")

$py = "C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\python.exe"
$yt_ul = "C:\Users\Administrator\AppData\Local\Programs\youtube-upload-master\bin\youtube-upload"

$title_date = (Get-Date).AddDays($days).ToString("dd.MM.yyyy")

$us = New-Object System.Globalization.CultureInfo("en-US")
$playlist_date = (Get-Date).AddDays($days).ToString("Y", $us)

$vid = "C:\Users\Administrator\Documents\timelapse\videos\timelapse_$cam_ip-$date.mp4"
$secr = "--client-secrets=C:\Users\Administrator\Documents\timelapse\credentials\.yt-ul-igu-secr.json"
$cred = "--credentials-file=C:\Users\Administrator\Documents\timelapse\credentials\.yt-ul-igu-cred.json"
$title = "--title=`"Timelapse $title_date`""
$playlist_date = "--playlist `"Timelapses $playlist_date`""
$arg_list = "$yt_ul $vid $secr $cred $title $playlist_date"

Invoke-Command "$py $arg_list"

But actually calling the script fails as follows:

PS C:\Users\Administrator\Documents\scripts> .\yt-ul.ps1
Invoke-Command : Parameter set cannot be resolved using the specified named parameters.
At C:\Users\Administrator\Documents\scripts\yt-ul.ps1:34 char:1
+ Invoke-Command "$py $arg_list"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Invoke-Command], ParameterBindingException
    + FullyQualifiedErrorId : AmbiguousParameterSet,Microsoft.PowerShell.Commands.InvokeCommandCommand

I assume I am doing something really stupid with the single and double quotes, but I am not sure.

2
  • Maybe & $py $yt_ul $vid $secr $cred $title $playlist_date or start-process instead of Invoke-Command? Commented Jun 24, 2016 at 6:54
  • Great! & $py worked! Well I got into "backtick" problems I expected but this call works: & $py $yt_ul $vid $secr $cred $title --title "Timelapse $title_date" --playlist "Timelapses $playlist_date" Commented Jun 24, 2016 at 7:19

1 Answer 1

0

Thanks to JosefZ this works:

& $py $yt_ul $vid $secr $cred --title "Timelapse $title_date" --playlist "Timelapses $playlist_date"
Sign up to request clarification or add additional context in comments.

Comments

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.