Если я начну удаленный сеанс 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.