2 votes

Équivalent de l'écran Windows powershell

J'utilise une machine Windows comme serveur ssh. Je veux exécuter à distance certaines tâches qui prennent plusieurs heures pour se terminer. Existe-t-il un moyen d'avoir un processus persistant même après la déconnexion de la session ssh distante dans Powershell ?

3voto

Uwe Points 471

Après quelques expérimentations, j'ai remplacé ssh par PowerShell Remoting.

En particulier, la section DÉMARRER UNE TÂCHE À DISTANCE QUI GARDE LES RÉSULTATS SUR L'ORDINATEUR À DISTANCE de l'application about_Remote_Jobs a été très utile.

En gros, mon flux de travail actuel est le suivant

  1. Ouvrir une nouvelle PSSession
  2. Invoquer une commande ( Invoke-Command ) sur le serveur distant comme un travail, avec Start-Job

Je peux alors librement me déconnecter de la session et me reconnecter plus tard à la session et obtenir les résultats du travail avec Receive-Job .

2voto

Vladimir Kornea Points 186

Utilisez le paramètre RunasJob via un PSSession :

(extrait de l'aide about_remote_jobs)

LANCER UN TRAVAIL À DISTANCE QUI RENVOIE LES RÉSULTATS À L'ORDINATEUR LOCAL (ASJOB)

Pour lancer une tâche d'arrière-plan sur un ordinateur distant qui renvoie l'icône les résultats de la commande à l'ordinateur local, utilisez le paramètre AsJob d'un cmdlet, tel que le cmdlet Invoke-Command.

Lorsque vous utilisez le paramètre AsJob, l'objet du travail est en réalité créé sur l'ordinateur local, même si le travail s'exécute sur l'ordinateur distant. ordinateur distant. Lorsque le travail est terminé, les résultats sont résultats sont renvoyés à l'ordinateur local.

Vous pouvez utiliser les cmdlets qui contiennent le nom Job (les cmdlets Job) pour gérer tout travail créé par n'importe quelle cmdlet. La plupart des cmdlets qui paramètres AsJob n'utilisent pas le remoting de Windows PowerShell.
vous pouvez les utiliser même sur des ordinateurs qui ne sont pas configurés pour
remoting et qui ne répondent pas aux exigences du remoting.

ÉTAPE 1 : INVOKE-COMMAND -ASJOB

La commande suivante utilise le paramètre AsJob de Invoke-Command pour démarrer un travail en arrière-plan sur l'ordinateur Server01. Le travail exécute une commande Get-Eventlog qui récupère les événements dans le journal du système. Vous pouvez utiliser pouvez utiliser le paramètre JobName pour attribuer un nom d'affichage à la tâche.

  invoke-command -computername Server01 -scriptblock {get-eventlog system} -asjob

Les résultats de la commande ressemblent à l'exemple de sortie suivant.

  SessionId   Name    State      HasMoreData     Location   Command
  ---------   ----    -----      -----------     --------   -------
  1           Job1    Running    True            Server01   get-eventlog system

Lorsque le paramètre AsJob est utilisé, Invoke-Command renvoie le même résultat que le paramètre AsJob. type d'objet de travail que celui renvoyé par Start-Job. Vous pouvez enregistrer l'objet dans une variable, ou vous pouvez utiliser une commande Get-Job pour obtenir le travail.

Notez que la valeur de la propriété Location indique que le travail a été exécuté. sur l'ordinateur Server01.

ÉTAPE 2 : TROUVER UN EMPLOI

Pour gérer un travail démarré à l'aide du paramètre AsJob de la commande Invoke-Command, utilisez les cmdlets Job. Comme l'objet de travail qui représente le travail distant se trouve sur l'ordinateur local, il n'est pas n'avez pas besoin d'exécuter des commandes distantes pour gérer le travail.

Pour déterminer si le travail est terminé, utilisez la commande Get-Job. La commande suivante permet d'obtenir tous les travaux qui ont été lancés dans la session en cours.

   get-job

Parce que le travail à distance a été lancé dans la session en cours, un travail local Get-Job locale permet d'obtenir le travail. La propriété State de l'objet job indique que la commande a été exécutée avec succès.

  SessionId   Name   State      HasMoreData     Location   Command
  ---------   ----   -----      -----------     --------   -------
  1           Job1   Completed  True            Server01   get-eventlog system

ÉTAPE 3 : RECEVOIR LE TRAVAIL

Pour obtenir les résultats du travail, utilisez le cmdlet Receive-Job. Comme les résultats du travail sont automatiquement renvoyés à l'ordinateur sur lequel réside l'ordinateur où réside l'objet du travail, vous pouvez obtenir les résultats avec une commande locale commande locale Receive-Job.

La commande suivante utilise le cmdlet Receive-Job pour obtenir l'adresse de l'entreprise. résultats de la tâche. Elle utilise l'ID de session pour identifier le travail. Cette commande enregistre les résultats du travail dans la variable $results. Vous pouvez consulter le site pouvez également rediriger les résultats vers un fichier.

  $results = receive-job -id 1

1voto

Eris Points 523

Ce que vous recherchez, ce sont des PSSessions.

Extrait de la page about_pssessions sur technet ( http://technet.microsoft.com/en-us/library/hh847839.aspx )

Cependant, contrairement à la session qui démarre automatiquement, vous pouvez contrôler les PSSessions que vous créez. Vous pouvez les obtenir, les créer, les configurer et les supprimer, vous déconnecter et vous reconnecter à elles, et exécuter plusieurs commandes dans la même PSSession. La PSSession reste disponible jusqu'à ce que vous la supprimiez ou qu'elle s'arrête.

1voto

Vladimir Kornea Points 186

Comme le PO utilise ssh pour se connecter à Powershell à partir d'une machine non Windows, il ne peut pas utiliser de sessions Powershell. Il doit l'exécuter comme s'il était connecté à la machine locale. Le cmdlet Start-Job devrait faire l'affaire :

Start-Job -scriptblock {script ou commande que vous souhaitez exécuter comme job}

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X