如果我使用以下命令启动远程 PowerShell 会话:
Enter-PSSession -ComputerName somecomputer
然后我想执行一个长时间运行的过程:
[somecomputer]: PS C:\>
C:\SomeApp\DoSomething.exe
如果我的远程会话由于某种原因(例如本地机器网络中断或重启)断开,有没有办法确保命令仍在服务器上完成?
据我所见,它似乎在我的 PS 会话结束时就消失了。我也试过了Start-Process
,但它似乎表现相同。
我正在尝试在服务器上运行一些程序,而无需使用 RDP。我还是 PowerShell 的初学者,所以我肯定还有很多东西没有掌握。我使用的是 Win10、PowerShell 7,连接到 Windows Server 2016,但我认为在任何地方都是一样的。
答案1
我认为你要找的是New-PSsesion
Enter-PSSession: Starts a temporary interactive session with a remote computer. You can have only one interactive session at a time using Enter-PSSession. Exiting the session destroys it.
New-PSSession: Creates a PERSISTENT connection to a local or remote computer. Exiting the session does not destroy it, it is still available to connect to again unless you do something like Disconnect-PSSession or it times out.
Furthermore, with New-PSSession you can assign the session a Name or to a variable for easier re-use, etc.
答案2
看起来我根本不需要新的会话,只需要正确的语法:
Invoke-Command `
-ComputerName somecomputer `
-AsJob `
-ScriptBlock {& 'C:\SomeApp\DoSomething.exe'}
该-AsJob
参数将命令作为后台服务运行。该-ScriptBlock
参数让我运行一个 exe。