Скрипт не работает в powershell

У меня есть этот фрагмент кода

$actDate=Get-Date -Format 'yyyy-MM-dd'
Start-job -name "FMLE" -command { cmd.exe /c 'c:\Program Files (x86)\Adobe\Flash Media Live Encoder 3.2\FMLEcmd.exe' /p C:\tasks\testing_2\testing 2_$actDate.xml /ap username:password /ab username:password /l C:\Users\acruz\AppData\Local\Temp\temp.log }

Я точно знаю, что var $actDate не заменяется в строке, как мне это сделать?

Мои два вопроса: как заменить $actDate на его значение и как сохранить результат задания в один журнал

Спасибо за вашу помощь

ИЗМЕНИТЬ

Это тоже не работает:

$actDate = (Get-Date -Format 'yyyy-MM-dd')
$Args = ("/p C:\tasks\testing_2\testing 2_$actDate.xml","/ap username:password", "/ab uysername:password", "/l C:\Users\acruz\AppData\Local\Temp\temp.log")
$Args

$j = Start-job -name "FMLE" -ScriptBlock { & 'c:\Program Files (x86)\Adobe\Flash Media Live Encoder 3.2\FMLEcmd.exe' @args } -ArgumentList $args

Get-Job $j.Id
Receive-Job -Job $j | Out-File 'C:\Users\acruz\AppData\Local\Temp\temp.log' -encoding ASCII -append -force 

Хотя $Args имеет правильную информацию...


person Cito    schedule 09.09.2013    source источник
comment
Как точно это не работает?   -  person Ansgar Wiechers    schedule 10.09.2013
comment
Он вообще ничего не делает. Если я запускаю эту команду из bash, она работает нормально. Но если я запускаю его внутри этого, он сообщает о плохом использовании, и это потому, что скрипт не заменяет $actDate для 2013-09-09... Тем не менее, я нашел способ заставить его работать.   -  person Cito    schedule 10.09.2013


Ответы (2)


Для вашего первого вопроса вам нужно указать путь, используя двойные кавычки. Предложение, если вы можете удалить пробел в тестировании 2

"C:\tasks\testing_2\testing2_$actDate.xml"

Чтобы зарегистрировать результат задания, используйте командлет Receive-Job.

Еще одна попытка.
Попробуйте поместить все пути в двойные кавычки, а затем заключить все в одинарную кавычку после части cmd.exe /c, как показано ниже. Попробуйте добиться чего-то более простого с помощью простой задачи, а затем попытайтесь добавить сложности.

$job = Start-Job -name "Hel" -Command { cmd.exe /c '"C:\Program Files (x86)\Mozilla Firefox\firefox.exe" /?'}
person Mitul    schedule 09.09.2013
comment
Я пробовал это, если я делаю -command { cmd.exe /c c:\$actDate }, вывод в консоли после Get-Job будет cmd.exe /c C:\$actDa.. вместо C:\2013-09 -09... - person Cito; 09.09.2013

Я смог заставить его работать, сделав это следующим образом:

Start-job -Verbose -ScriptBlock {
    $actDate = Get-Date -Format yyyy-MM-dd
    cd "c:\Program Files (x86)\Adobe\Flash Media Live Encoder 3.2\"
    .\FMLEcmd.exe /p "C:\site.com.mx\tasks\test_23445678\test 23445678_$actDate.xml" /ap user:password /ab user:password /l C:\site.com.mx\task.log
}

Делая это с -command, это не работает, потому что это вообще не заменяет переменную. Кроме того, если я делаю это с -ArgumentList, либо заменяю переменную $actDate, так что я подумал, что это может быть связано с добавлением всего скрипта в блок, это сработало... и действительно, это сработало...

Поэтому я не знаю, почему это не работает, но это исправление для меня.

person Cito    schedule 09.09.2013
comment
Атрибут powershell $actDate был вне контекста из блока сценария -command { } решение, которое, как вы сказали, работает, помещает переменную в контекст ... По крайней мере, я так думаю :) - person The Unique Paul Smith; 10.09.2013