powershell - 让 Powershell 将 Start-Process ssh.exe 置于后台
问题描述
我正在使用下面的这个 powershell 脚本,我将我在网上找到的代码拼凑在一起,它在大多数情况下都有效。它只需要使用 if 条件在主机上尝试两个可用的 ssh 端口,然后在成功后启动 mstsc.exe。我想解决一些问题:
- 为什么 -NoNewWindow 参数在第一个实例中起作用,但在 else 块中不起作用?
- 为什么我必须依靠 Start-Sleep 在 ssh.exe 进入后台后运行任何行。如果我不使用 Start-Sleep,似乎 mstsc.exe 进程启动得太早或根本没有启动,因为它正在等待 ssh.exe 完成。如果您将 -v 添加到 ssh,您会看到它确实以“分叉到后台”完成,这已经完成但技术上尚未完成。
是否有类似于使用 & 符号的类似 Linux bash 的解决方法?
谢谢!
$server = "152.306.2.20"
$port1 = 443
$port2 = 222
$user = Read-Host -Prompt 'Enter your username'
Write-Host "Trying $port1 ..."
$connection = New-Object System.Net.Sockets.TcpClient ($server, $port1)
if ($connection.Connected) {
Write-Host "Port 222 available, establishing SSH connection with xrdp tunnel"
Start-Process -NoNewWindow ssh.exe -ArgumentList "-p $port1", '-Nf', "-l $user", '-L 3929:127.0.0.1:3929', "$server"
Start-Sleep -s 10
Write-Host "Opening remote desktop on localhost:3929"
Start-Sleep -s 2
Start-Process mstsc.exe -ArgumentList "/v:127.0.0.1:3929"
}
else {
Write-Host "Port 222 unavailable, establishing SSH connection with xrdp tunnel on alternate port"
Start-Process -NoNewWindow ssh.exe -ArgumentList "-p $port2", '-Nf', "-l $user", '-L 3929:127.0.0.1:3929', "$server"
Start-Sleep -s 10
Write-Host "Opening remote desktop on localhost:3929"
Start-Sleep -s 2
Start-Process mstsc.exe -ArgumentList "/v:127.0.0.1:3929"
}
解决方案
Woops 问题 #1 只是因为我是从 Powershell 编辑器运行的,所以这不是问题。问题 #2 仍未解决。
推荐阅读
- asp.net - 通过 FTP 发布 .NET Core 3.1 应用程序时出现错误代码 550
- c - 设置主题窗口的标题
- flutter - Flutter Stack 未对齐浮动操作按钮
- asp.net-mvc - SqlException:列名“LCityCityID”无效
- wordpress - wordpress 解析错误:语法错误,文件意外结束
- java - 弹簧设置和安装
- python - 在目录中运行 OS 命令
- lua - 如何导入 luarocks 本地模块
- javascript - 如何在 Firestore 中获取上一个文档
- python - yfinance“历史”功能在我的 python 会话中不起作用,我该如何调试?