Получить значение функции из вызова Remote Powershell - PullRequest
1 голос
/ 07 декабря 2011

Я вызываю скрипт Powershell (.ps1), который вызывает функцию из сторонней сборки (компонент Rebex SFTP).Эта функция возвращает целочисленное значение.Этот удаленный вызов выполняется из кода C #.

Я хочу преобразовать результат этого вызова в int для дальнейшей обработки в коде C #.

Как это можно сделать наиболее эффективно?

Вот некоторый код:

Фрагмент кода RemoteInvocationManager (пользовательский класс с Powershell Remoting, только важные части):

using (Pipeline pipeline = remoteRunspace.CreatePipeline(scriptText))
{
Collection<PSObject> results = pipeline.Invoke();

       foreach (PSObject obj in results)
       {
         stringBuilder.AppendLine(obj.ToString());
       }
}

Фрагмент кода вызова RemoveInocationManager:

string command = @"& c:\temp\sftp\mytransfer.ps1";
string result = RemoteInvocationManager.RunScript(command);

Фрагмент кода скрипта Powershell (файл .ps1):

[Reflection.Assembly]::LoadFrom("C:\Program Files (x86)\Rebex\SFTP for .NET 2.0 Trial\bin\Rebex.Net.Sftp.dll")
$sftp = New-Object Rebex.Net.Sftp
$sftp.Connect("127.0.0.1")
$SshPrivateKey = New-Object Rebex.Net.SshPrivateKey("c:\temp\sftp\keys\private\myprivatekey.ppk", "myuser")
$sftp.Login("myuser", $SshPrivateKey)
$sftp.PutFile("c:\temp\sftp\input\file1.txt", "/output/fileout.txt")
$sftp.Disconnect()

1 Ответ

0 голосов
/ 08 декабря 2011

Похоже, что вы хотите:

int output;
bool isSuccess = int.TryParse(result, out output);
if(isSuccess){
//use outout
}

Обновление:

Чтобы подавить положенные вещи, которые вам не нужны, используйте [void] или трубку к Out-Null

[void][Reflection.Assembly]::LoadFrom("C:\Program Files (x86)\Rebex\SFTP for .NET 2.0 Trial\bin\Rebex.Net.Sftp.dll")

или

[Reflection.Assembly]::LoadFrom("C:\Program Files (x86)\Rebex\SFTP for .NET 2.0 Trial\bin\Rebex.Net.Sftp.dll") | Out-Null
...