Система не может найти указанный файл при попытке запустить скрипт PowerShell

Я работаю над меню, которое вызывает сценарии PowerShell с wscript.shell и ActiveX. Я передаю три переменные в wshshell.Run:

  • scriptID, имя файла ps1,
  • vmName — имя виртуальной машины, на которой будет действовать скрипт, и
  • checkstate, который является состоянием флажка, связанного с пунктом меню.

Вот мой текущий нерабочий код:

WshShell = new ActiveXObject("Wscript.Shell");
WshShell.Run("powershell.exe  -file " & scriptID & " " & vmName & " " & checkstate, 7, true);  

При этом всегда возникает ошибка «Система не может найти указанный файл».

Я попытался следовать синтаксису, упомянутому здесь и здесь безуспешно. Оба кажутся многообещающими, но выдают ту же ошибку, что и выше.

Я протестировал переменные и просто запустил:

WshShell.Run("powershell.exe -file test.ps1", 7, true)

который работает, но

WshShell.Run("powershell.exe -file " & "test.ps1", 7, true)

терпит неудачу.


person afterbyrner    schedule 13.01.2015    source источник
comment
Я думаю, у вас уже есть ответ «&» против «+». Поэтому просто примечание: при вызове сценариев PowerShell всегда старайтесь использовать полный путь к сценарию. -file c:\tmp\test.ps1 может избавить от многих периодически возникающих проблем.   -  person Jan Chrbolka    schedule 14.01.2015


Ответы (2)


Ваш код не работает, потому что оператор конкатенации строк в JavaScript — +, а не &.

Измените это:

WshShell.Run("powershell.exe -file " & scriptID & " " & vmName & " " & checkstate, 7, true);

в это:

WshShell.Run("powershell.exe -file " + scriptID + " " + vmName + " " + checkstate, 7, true);
person Ansgar Wiechers    schedule 13.01.2015
comment
Это сделало это. Проведя кучу тестов в VB, я даже не думал, что они будут проблемой. Спасибо! - person afterbyrner; 14.01.2015

Попробуйте установить Wshell.WorkingDirectory в каталог, где находится ваш test.ps1.

eg:

wsh = new ActiveXObject("Wscript.Shell");
wsh.workingDirectory = "C:\my\dir\to\psscript";
wsh.run("powershell.exe -file test.ps1", 7, true);

Проверьте MSDN.

person 8t'    schedule 13.01.2015
comment
Свойство WorkingDirectory применяется только к VBscript. Для Javascript используйте свойство CurrentDirectory. - person Kidquick; 27.10.2016