Удаленные сеансы Powershell случайно умирают

Удаленные сеансы Powershell случайно умирают

Приведенный ниже код Powershell — это то, как я запускаю удаленный PSSession.

$compName = "server1"

$jobname = "admin_test"

$cred = Get-Credential -UserName "DOMAIN\$env:username" -Message "DOMAIN\$env:username password"

$s_opt = New-PSSessionOption -IdleTimeout -1

$s1 = New-PSSession -ComputerName $compName -Name $jobname -SessionOption $s_opt -Credential $cred

В большинстве случаев это работает отлично, и мы можем $s1 | Enter-PSSessionи запускать команды или использовать Invoke-Command -Session $s1 -ScriptBlock {some code}. Когда мы запускаем определенные задания (обычно python или java), выполнение которых может занять много часов, иногда сеанс PSSession неожиданно завершается.

Нужно ли мне добавить другие или больше -SessionOptions?

Есть ли способ узнать, почему PSSession умер?

Редактировать

Ниже представлен выводNew-PSSessionOption

PS C:\> New-PSSessionOption

MaximumConnectionRedirectionCount : 5
NoCompression                     : False
NoMachineProfile                  : False
ProxyAccessType                   : None
ProxyAuthentication               : Negotiate
ProxyCredential                   :
SkipCACheck                       : False
SkipCNCheck                       : False
SkipRevocationCheck               : False
OperationTimeout                  : 00:03:00
NoEncryption                      : False
UseUTF16                          : False
IncludePortInSPN                  : False
OutputBufferingMode               : None
MaxConnectionRetryCount           : 0
Culture                           :
UICulture                         :
MaximumReceivedDataSizePerCommand :
MaximumReceivedObjectSize         :
ApplicationArguments              :
OpenTimeout                       : 00:03:00
CancelTimeout                     : 00:01:00
IdleTimeout                       : -00:00:00.0010000

Редактировать 2

Я добавил код ниже в свою процедуру для запуска PSSession, однако он PSSessionвсе равно останавливается без причины примерно через 2 часа.

## -IdleTimeoutSec in sec/min * min/hr * hrs/day * days
Disconnect-PSSession -Session $s1 -IdleTimeoutSec 60*60*24*3

Это основано на следующем описании -IdleTimeoutSecнеобязательного параметра в документации Microsoft PowershellОтключить-PSSession

Также хорошо объяснено в девятой команде Примера 3 документации MS для команды PowershellConnect-PSSession Примерыотрывок ниже.

# The ninth command disconnects from the session in the $s variable.The administrator closes PowerShell and closes the computer. She can reconnect to the session on the next day and check the script status from her work computer.
PS C:\> Disconnect-PSSession -Session $s -OutputBufferingMode Drop -IdleTimeoutSec 60*60*15

Одна безумная вещь, которая либо является ошибкой в ​​документации MS, либо связана с другой версией Powershell, заключается в том, что команда выше выдает следующую ошибку:

Disconnect-PSSession : Cannot bind parameter 'IdleTimeoutSec'. Cannot convert value "60*60*24*3" to
type "System.Int32". Error: "Input string was not in a correct format."
At line:1 char:76
+ ... sion -Session $x -IdleTimeoutSec 60*60*24*3
+                                      ~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Disconnect-PSSession], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.Disconnect
   PSSessionCommand

Однако следующая команда работает нормально, если переданное целочисленное значение -IdleTimeoutSecпреобразуется в строку.

PS C:> Disconnect-PSSession -Session $s1 -IdleTimeoutSec "259200"

 Id Name            ComputerName    ComputerType    State         ConfigurationName     Availability
 -- ----            ------------    ------------    -----         -----------------     ------------
  5 admin_test      Server1         RemoteMachine   Disconnected  Microsoft.PowerShell          None

решение1

Возможно, вы столкнулись с другим параметром тайм-аута по умолчанию, нежели IdleTimeout тот, который вы использовали.

Запустите команду New-PSSessionOptionбез параметров (включите вывод в свой пост, если хотите, чтобы мы посмотрели). Обратите особое внимание на OperationTimeout.

Из документации для Новый-PSSessionOption:

-OperationTimeout

Определяет максимальное время, в течение которого может выполняться любая операция в сеансе. По истечении интервала операция завершается неудачей. Введите значение в миллисекундах.

Значение по умолчанию — 180000 (3 минуты). Значение 0 (ноль) означает отсутствие тайм-аута; операция продолжается бесконечно.

Связанный контент