【问题标题】:Execute powershell script on a remote computer using C#使用 C# 在远程计算机上执行 powershell 脚本
【发布时间】:2017-06-13 22:10:30
【问题描述】:

我使用 Microsoft Bot Framework 创建了一个 Bot 应用程序,并希望实现以下目标:

  1. 无需任何身份验证即可在远程计算机上执行 Powershell 脚本
  2. powershell 脚本将托管在 Azure 或数据库(可能是任何数据库)上

到目前为止我已经完成了以下操作:

  1. 能够在远程计算机上手动执行 Powershell 脚本
  2. 能够使用 C# 代码在本地执行 Powershell 脚本

以下是我当前的代码:

WSManConnectionInfo connectioninfo = new WSManConnectionInfo();
connectioninfo.ComputerName = "<remote computer hostname>";
Runspace runspace = RunspaceFactory.CreateRunspace(connectioninfo); 
//runspace.Open();
using (PowerShell ps = PowerShell.Create())
{ 
   var re = ps.AddScript("Get-Service"); 
   var results = re.Invoke(); 
}

【问题讨论】:

  • 远程计算机的所有者是谁?它们是否完全在您的控制范围内 - 您是否为它们管理安全策略?
  • 如果远程计算机启用了PSRemoting,您可以使用Invoke-Command
  • 嗨 Dylan/James,我不是远程计算机的所有者。我将创建一个管理员,Bot 可以通过该管理员登录远程计算机并执行管理工作。 Invoke-Command 在 powershell 窗口和手动干预下工作正常。我正在寻找一种通过 C# 代码进行自动远程处理的方法。
  • @zee 你现在碰巧解决了这个问题吗?我和你的情况完全一样。真的需要这方面的帮助......

标签: c# powershell botframework


【解决方案1】:

我认为您缺少 PowerShell 实例与运行空间的绑定。

ps.Runspace = runspace;

查看this了解更多详情。

或者,您可以使用运行空间创建管道(如 here 所述)并调用命令。

Pipeline pipeline = runspace.CreatePipeline("<COMMAND TO EXECUTE REMOTELY>");

var results = pipeline.Invoke();

【讨论】:

  • 在 ps.addCommand 执行方式上使用 Pipeline 是否有任何优点/缺点?
猜你喜欢
  • 1970-01-01
  • 2014-07-26
  • 1970-01-01
  • 1970-01-01
  • 2019-12-03
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
  • 2019-07-28
相关资源
最近更新 更多