Csharp C#代码中无法识别PowerShell字符串命令中的管道字符

Csharp C#代码中无法识别PowerShell字符串命令中的管道字符,c#,powershell,pipe,ssh.net,C#,Powershell,Pipe,Ssh.net,我必须从代码在远程机器上执行一些PowerShell命令。为此,我使用.NETSSH客户端。除了管道命令解释之外,其他一切都正常工作。下面的代码返回一个错误: 调试:“停止进程”未被识别为内部或外部进程 命令、可操作程序或批处理文件 如果我添加额外的引号,它会起作用: var cmd2 = client.CreateCommand( "powershell.exe -executionPolicy bypass; " +

我必须从代码在远程机器上执行一些PowerShell命令。为此,我使用.NETSSH客户端。除了管道命令解释之外,其他一切都正常工作。下面的代码返回一个错误:

调试:“停止进程”未被识别为内部或外部进程 命令、可操作程序或批处理文件


如果我添加额外的引号,它会起作用:

var cmd2 = client.CreateCommand(
                    "powershell.exe -executionPolicy bypass; " +
                    "\"Get-Process notepad | Stop-Process\"; " +
                    "exit ;");

问题不在于管道角色。您正在尝试通过SSH启动CMD脚本,该脚本使用原始Powershell脚本启动Windows Powershell可执行文件,而原始Powershell脚本对
CMD
毫无意义。如果要远程执行Powershell,请使用。在Windows上,这在WinRM上工作,而不是SSH(一开始不可用)。在Linux和Powershell内核上,它可以工作。如果您使用Windows 10或Windows Server 2019,也可以通过SSH进行远程处理。但这对客户来说是透明的。您不需要SshClient,也不能通过Windows可执行文件使用它。@PanagiotisKanavos您可能应该从这些注释中找到答案。我对OP的答案投了更高的票,因为它很有效,因此很有用,但您建议的答案要干净得多。@PanagiotisKanavos您能给我一个代码示例来测试吗?它实际上并不有用。没有必要像这样使用powershell.exe,它已经提供了安全的远程处理。Windows Powershell已被Powershell核心所取代,因此在某些情况下,
Powershell.exe
可能会工作,也可能不会工作。另一方面,通过远程处理,您可以编写
Get Process-ComputerName that computer notepad
var cmd2 = client.CreateCommand(
                    "powershell.exe -executionPolicy bypass; " +
                    "\"Get-Process notepad | Stop-Process\"; " +
                    "exit ;");