Возврат вывода из сценария Powershell в UIPath с помощью командной оболочки Invoke.

Я пытаюсь получить значение из поля ввода из сценария Powershell обратно в последовательность пути пользовательского интерфейса. Я создал простую последовательность в качестве примера. Да, я знаю, что могу сделать все это в UI Path, я просто использую простой пример, чтобы попробовать и протестировать это для будущих вариантов использования. Вот моя последовательность:

последовательность

Мой текстовый файл из «Читать текстовый файл»:

$test = "Desktop/PassingArgs2of2.ps1 -Message foo"
Invoke-Expression -Command $test

Активность в UiPath выглядит так:

Читать текстовый файл

psCmd, который я запускаю в действии Power Shell Invoke, выглядит следующим образом:

Param(
[parameter(Mandatory=$true)]
[string]
$Message)

try{

    $Global:fooVar = $null

    function Test-InputBox(){
        [void][Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')
        $msg = "fooMsg"
        $title = "fooTitle"
        $localtest = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title)
        $Global:fooVar = $localtest.ToString()
    }
    Test-InputBox
}
catch{}

Я попытался установить fooVar равным testLocal в PowerShellVariables в оболочке Invoke power, а затем записать его, но это не сработало.

fooVar

В основном я хочу вернуть fooVar в путь пользовательского интерфейса. Любая помощь будет принята с благодарностью. Благодарю вас!


person NovaPrice    schedule 26.10.2018    source источник


Ответы (1)


Ты почти там. Во-первых, ваш сценарий Powershell должен возвращать значение. Возьмите это, например:

[void][Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')

$title = 'Your title goes here'
$msg   = 'Your favorite color:'

$text = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title)
return $text

Вот скрипт в действии (обратите внимание, что я вызвал его дважды и в первый раз указал «красный»:

окно сообщений powershell

Затем просто используйте этот скрипт непосредственно в действии Invoke Powershell. Обратите внимание, что наиболее важной частью здесь является свойство Output — здесь я решил использовать массив строк. Естественно, поскольку мы возвращаем только одно значение, вы можете просто получить доступ к тексту, предоставленному пользователем, обратившись к output(0).ToString().

вызов ps в UiPath

person Wolfgang Radl    schedule 27.10.2018
comment
Благодарю вас! Есть ли у вас какие-либо советы по передаче параметров? Лучший способ, который я могу придумать, это сохранить их как переменные и фактически записать их в ваш файл test.ps1 (или .txt), а затем вызвать cmd. Любые указатели? - person NovaPrice; 29.10.2018
comment
Нет необходимости, вы можете просто использовать набор параметров из действия InvokePowerShell. Обратите внимание, что ваш сценарий должен сначала объявить параметры. Не стесняйтесь задавать другой вопрос, если у вас возникнут проблемы. - person Wolfgang Radl; 29.10.2018
comment
Я попытался реализовать ваше решение. Но я получаю ошибку ниже. Не могли бы вы помочь мне с этим? ***System.Management.Automation.CommandNotFoundException: термин '[void][Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') $title = 'Здесь будет ваш заголовок' $msg = 'Ваш любимый цвет:' $text = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title) return $text' не распознается как имя командлета, функции, файла сценария или исполняемой программы. Проверьте правильность написания имени или, если был указан путь, убедитесь, что путь указан правильно, и повторите попытку. - person udani; 15.11.2018
comment
Нашел мою проблему; Я не установил параметр IsScript... :) - person udani; 15.11.2018
comment
@WolfgangRadl Можете ли вы помочь мне с передачей параметров в скрипт powershell с помощью uipath. Я объявил сценарий следующим образом. Param( [Parameter(Mandatory=$true)] [string]$Euser ) return Деактивация $Euser - person udani; 15.11.2018
comment
@WolfgangRadl Я пытаюсь загрузить dll [Reflection.Assembly]::LoadFile(C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll) и получаю следующую ошибку Throw: Unable для приведения объекта типа «System.Reflection.RuntimeAssembly» к типу «System.String». Любые идеи? - person NovaPrice; 04.12.2018