Powershell远程没有标准输出

时间:2015-02-03 00:28:22

标签: c# powershell remote-access

我在C#中使用PowerShell对象来执行远程命令。我希望获得值为Get-ExecutionPolicy的示例命令,但不返回标准输出。

最终目标是在远程实例上获取剩余磁盘空间。

这是我用来远程执行脚本的代码。它工作正常,安静地按预期执行所有测试,输出错误和异常,但......没有标准输出。有人可以帮忙吗?

PowerShell ps = PowerShell.Create();
logger.LogAndDisplay(Logger.MessageType.Note, "Connecting to '" + instance0 + "'");
logger.LogAndDisplay(Logger.MessageType.Note, "Executing script on remote: '" + path0 + "'.");
ps.AddScript("$password = convertto-securestring -asplaintext -force -string " + pass);
ps.AddScript("$credential = new-object -typename system.management.automation.pscredential -argumentlist " + user + ", $password");
ps.AddScript("$session = new-pssession " + instance0 + " -credential $credential");
ps.AddScript("Invoke-Command -Session $session -FilePath " + path0);
ps.AddScript("Remove-PSSession $session");
Execute(ps);

private bool Execute(PowerShell ps0)
{
    bool success = true;

    PSOutput.Clear();
    PSOutput = ps0.Invoke();

    if (ps0.HadErrors)
    {
        success = false;
        PSDataCollection<ErrorRecord> PSErrors = ps0.Streams.Error;
        foreach (ErrorRecord e in PSErrors)
        {
            logger.LogAndDisplay(Logger.MessageType.Note, e.ToString());
        }
    }

    if (PSOutput.Count() > 0)
    {
        logger.LogAndDisplay(Logger.MessageType.Subheader, "Command output:");
    }

    foreach (PSObject outputItem in PSOutput)
    {
        if (outputItem != null)
        {
            logger.LogAndDisplay(Logger.MessageType.Note, outputItem.BaseObject.GetType().FullName);
            logger.LogAndDisplay(Logger.MessageType.Note, outputItem.BaseObject.ToString() + "\n");
        }
    }

    logger.LogAndDisplay(Logger.MessageType.Note, "Command complete. Disconnecting.");
    ps0.Dispose();
    return success;
}

1 个答案:

答案 0 :(得分:1)

问题在于这一行:

ps.AddScript("Remove-PSSession $session");
  

Remove-PSSession cmdlet可关闭Windows PowerShell会话   (PSSessions)在本届会议上。它会停止任何命令   在PSSessions中运行,结束PSSession,释放   PSSession正在使用的资源。如果PSSession已连接   对于远程计算机,Remove-PSSession也会关闭连接   本地和远程计算机之间。

(强调我的)

显然,这包括流。

在我的搜索过程中,我偶然发现了ths interesting关于PowerShell输出的帖子,这些帖子也可以回答未来的一些问题。