В настоящее время я пытаюсь использовать phantomJS, чтобы сделать снимок веб-страницы для работы. У меня есть скрипт, работающий правильно, и я могу запустить его из powershell.
Dim PhantomString As String = $"'{System.Environment.CurrentDirectory}\phantomjs' PhantomJSScript.js {parameter1} {parameter2} {parameter3} {parameter4}"
Это строка, представляющая вызов, который я использую в powershell для выполнения моего PhantomJSScript, который называется PhantomJSScript.js. Когда я пытаюсь запустить эту команду из своего кода на vb.net, я получаю сообщение об ошибке, что параметры не распознаются как токены. Я использую System.Management.Automation.Runspaces.Runspace
и другие дочерние библиотеки для выполнения этого.
Using MyRunSpace As Runspace = RunspaceFactory.CreateRunspace
MyRunSpace.Open()
Dim MyPipeline As Pipeline = MyRunSpace.CreatePipeline()
MyPipeline.Commands.AddScript(PhantomString, True)
Dim pipeLineResult As Collection(Of PSObject) = MyPipeline.Invoke()
If MyPipeline.Error.Count > 0 Then
ImageList = Nothing
Else
ImageList = (From pipeOut In pipeLineResult Select (pipeOut.ToString)).ToList
End If
End Using
Return ImageList
Это код, который я использую для запуска команды. Чтобы компенсировать ошибку, которая появляется, когда {parameter1}
не является распознанным токеном, я попытался использовать свойство параметров в команде. Вместо этого я добавил каждый из параметров в PhantomString в свойство команды и удалил их из PhantomString. Это позволило скрипту работать (или так казалось), однако он просто вернул точное значение PhantomString, которое я передал. Я ожидал битового представления запрошенного изображения.
Вот как выглядит мой код, когда я пытаюсь передать параметры другим способом:
Dim PhantomString As String = $"'{System.Environment.CurrentDirectory}\phantomjs'"
Using MyRunSpace As Runspace = RunspaceFactory.CreateRunspace
MyRunSpace.Open()
Dim MyPipeline As Pipeline = MyRunSpace.CreatePipeline()
MyPipeline.Commands.AddScript(PhantomString, True)
MyPipeline.Commands.FirstOrDefault.Parameters().Add("arg1", "PhantomJSScript.js")
MyPipeline.Commands.FirstOrDefault.Parameters().Add("arg2", $"{parameter1}")
MyPipeline.Commands.FirstOrDefault.Parameters().Add("arg3", $"{parameter2}")
MyPipeline.Commands.FirstOrDefault.Parameters().Add("arg4", $"{parameter3}")
MyPipeline.Commands.FirstOrDefault.Parameters().Add("arg5", $"{parameter4}")
Dim pipeLineResult As Collection(Of PSObject) = MyPipeline.Invoke()
If MyPipeline.Error.Count > 0 Then
ImageList = Nothing
Else
ImageList = (From pipeOut In pipeLineResult Select (pipeOut.ToString)).ToList
End If
End Using
Return ImageList
Может ли кто-нибудь дать мне несколько советов о том, как это работает правильно?
Спасибо!