从远程Powershell调用中获取函数值

时间:2011-12-07 13:44:15

标签: powershell powershell-remoting

我远程调用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 :(得分:0)

看起来你想要:

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