Sessões Powershell remotas morrem aleatoriamente

1

O código Powershell abaixo mostra como eu estou iniciando o controle remoto 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

Isso funciona muito bem para a maior parte e podemos $s1 | Enter-PSSession e executar comandos ou usar Invoke-Command -Session $s1 -ScriptBlock {some code} . Quando executamos tarefas específicas (normalmente python ou java) que podem levar muitas horas para serem concluídas, às vezes a PSSession morre inesperadamente.

Eu preciso adicionar diferentes ou mais -SessionOption s?

Existe uma maneira de descobrir por que a PSSession morreu?

Editar

Abaixo está a saída de 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

Editar 2

Eu adicionei o código abaixo à minha rotina para iniciar o PSSession , mas o PSSession ainda para por nenhuma razão após cerca de 2 horas.

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

Isso foi baseado na seguinte descrição do parâmetro -IdleTimeoutSec opcional nos documentos do Powershell da Microsoft Desconectar-PSSession

Também foi explicado bem no nono comando do Exemplo 3 dos documentos do MS para o comando Powershell Connect-PSSession Exemplos extraídos abaixo.

# 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

Uma coisa louca que é um erro no MS docs ou tem a ver com uma versão diferente do Powershell é que o comando acima apresenta o seguinte erro:

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

No entanto, o comando a seguir funciona bem quando o valor inteiro passado para -IdleTimeoutSec é convertido em uma string.

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

 Id Name            ComputerName    ComputerType    State         ConfigurationName     Availability
 -- ----            ------------    ------------    -----         -----------------     ------------
  5 admin_test      Server1         RemoteMachine   Disconnected  Microsoft.PowerShell          None
    
por Clay 10.10.2018 / 20:45

1 resposta

0

Você pode estar executando outro parâmetro de tempo limite padrão do que IdleTimeout que você usou.

Execute o comando New-PSSessionOption sem parâmetros (inclua a saída no seu post, se você quiser dar uma olhada). Preste atenção especial a OperationTimeout .

Da documentação para New-PSSessionOption :

-OperationTimeout

Determines the maximum time that any operation in the session can run. When the interval expires, the operation fails. Enter a value in milliseconds.

The default value is 180000 (3 minutes). A value of 0 (zero) means no time-out; the operation continues indefinitely.

    
por 10.10.2018 / 21:54