about_PSSession_Details
Description courte
Fournit des informations détaillées sur les sessions PowerShell et le rôle qu’ils jouent dans les commandes à distance.
Description longue
Une session est un environnement dans lequel PowerShell s’exécute. Une session est créée pour vous chaque fois que vous démarrez PowerShell. Vous pouvez créer des sessions supplémentaires, appelées « sessions PowerShell » ou « PSSessions » sur votre ordinateur ou un autre ordinateur.
Contrairement aux sessions que PowerShell crée pour vous, vous contrôlez et gérez les sessions PSSession que vous créez.
Les sessions PSSession jouent un rôle important dans l’informatique à distance. Lorsque vous créez une session PSSession connectée à un ordinateur distant, PowerShell établit une connexion persistante à l’ordinateur distant pour prendre en charge psSession. Vous pouvez utiliser psSession pour exécuter une série de commandes, de fonctions et de scripts qui partagent des données.
Cette rubrique fournit des informations détaillées sur les sessions et les sessions PSSession dans PowerShell. Pour plus d’informations sur les tâches que vous pouvez effectuer avec des sessions, consultez about_PSSessions.
À propos des sessions
Techniquement, une session est un environnement d’exécution dans lequel PowerShell s’exécute. Chaque session inclut une instance du moteur System.Management.Automation et un programme hôte dans lequel PowerShell s’exécute. L’hôte peut être la console PowerShell familière ou un autre programme qui exécute des commandes, telles que Cmd.exe, ou un programme conçu pour héberger PowerShell, tel que l’environnement de script intégré Windows PowerShell (ISE). D’un point de vue Windows, une session est un processus Windows sur l’ordinateur cible.
Chaque session est configurée indépendamment. Il inclut ses propres propriétés, sa propre stratégie d’exécution et ses propres profils. L’environnement qui existe lorsque la session est créée persiste pendant sa durée de vie même si vous modifiez l’environnement sur l’ordinateur. Toutes les sessions sont créées dans une étendue globale, même les sessions que vous créez dans un script.
Vous ne pouvez exécuter qu’une seule commande (ou pipeline de commandes) dans une session à la fois. Une deuxième commande s’exécute de façon synchrone (une à la fois) attend jusqu’à quatre minutes pour que la première commande soit terminée. Une deuxième commande s’exécute de manière asynchrone (simultanément) échoue.
À propos de PSSessions
Une session est créée chaque fois que vous démarrez PowerShell. Et PowerShell crée des sessions temporaires pour exécuter des commandes individuelles. Toutefois, vous pouvez également créer des sessions (appelées « sessions PowerShell » ou « PSSessions ») que vous contrôlez et gérez.
Les sessions PSSession sont critiques pour les commandes à distance. Si vous utilisez le paramètre ComputerName des applets de commande ou Enter-PSSession
des applets de Invoke-Command
commande, PowerShell établit une session temporaire pour exécuter la commande, puis ferme la session dès que la commande ou la session interactive est terminée.
Toutefois, si vous utilisez l’applet New-PSSession
de commande pour créer une session PSSession, PowerShell établit une session persistante sur l’ordinateur distant dans lequel vous pouvez exécuter plusieurs commandes ou sessions interactives. Les sessions PSSession que vous créez restent ouvertes et disponibles pour une utilisation jusqu’à ce que vous les supprimiez ou jusqu’à ce que vous fermez la session dans laquelle elles ont été créées.
Lorsque vous créez une session PSSession sur un ordinateur distant, le système crée un processus PowerShell sur l’ordinateur distant et établit une connexion de l’ordinateur local au processus sur l’ordinateur distant. Lorsque vous créez une session PSSession sur l’ordinateur local, le nouveau processus et les connexions sont créés sur l’ordinateur local.
Quand ai-je besoin d’une session PSSession ?
Les Invoke-Command
applets de commande et Enter-PSSession
les applets de commande ont à la fois des paramètres ComputerName et Session . Vous pouvez utiliser l’une ou l’autre pour exécuter une commande à distance.
Utilisez le paramètre ComputerName pour exécuter une seule commande ou une série de commandes non liées sur un ou plusieurs ordinateurs.
Pour exécuter des commandes qui partagent des données, vous avez besoin d’une connexion persistante à l’ordinateur distant. Dans ce cas, créez une session PSSession, puis utilisez le paramètre Session pour exécuter des commandes dans la session PSSession.
De nombreuses autres applets de commande qui obtiennent des données à partir d’ordinateurs distants, telles que , , et Get-WmiObject
qui ont uniquement un paramètre ComputerName. Get-EventLog
Get-Service
Get-Process
Ils utilisent des technologies autres que la communication à distance PowerShell pour collecter des données à distance. Ces applets de commande n’ont pas de paramètre session , mais vous pouvez utiliser l’applet Invoke-Command
de commande pour exécuter ces commandes dans une session PSSession.
Comment créer une session PSSession ?
Pour créer une session PSSession, utilisez l’applet New-PSSession
de commande. Vous pouvez utiliser New-PSSession
pour créer une session PSSession sur un ordinateur local ou distant.
Puis-je créer une session PSSession sur n’importe quel ordinateur ?
Pour créer une session PSSession connectée à un ordinateur distant, l’ordinateur doit être configuré pour la communication à distance dans PowerShell. L’utilisateur actuel doit être membre du groupe Administration istrators sur l’ordinateur distant, ou l’utilisateur actuel doit pouvoir fournir les informations d’identification d’un membre du groupe Administration istrators. Pour plus d’informations, consultez about_Remote_Requirements.
Puis-je voir mes sessions PSSessions dans d’autres sessions ?
À compter de Windows PowerShell 3.0, le paramètre ComputerName de l’applet Get-PSSession
de commande obtient les sessions PSSession que vous avez créées sur les ordinateurs distants spécifiés.
Les sessions PSSession actives sont conservées sur l’ordinateur distant (côté serveur d’une connexion) et vous pouvez les obtenir à partir de n’importe quelle session sur n’importe quel ordinateur.
Par exemple, si vous créez une session PSSession à partir de l’ordinateur Server01 vers l’ordinateur Server02, puis basculez vers l’ordinateur Server03, vous pouvez utiliser une commande comme celle suivante pour obtenir la session.
Get-PSSession -ComputerName Server02
Même si vous vous déconnectez de la session, la session est conservée sur l’ordinateur distant jusqu’à ce que vous le supprimiez ou qu’elle expire.
Dans Windows PowerShell 2.0, vous ne pouvez obtenir que les sessions PSSession que vous avez créées dans la session active. Vous ne pouvez pas obtenir les sessions PSSession que vous avez créées dans d’autres sessions.
Pour plus d’informations, consultez Get-PSSession.
Puis-je voir les sessions PSSession que d’autres personnes ont créées sur mon ordinateur ?
Vous pouvez obtenir et gérer uniquement les sessions PSSession que d’autres utilisateurs ont créés uniquement si vous pouvez fournir les informations d’identification de l’utilisateur qui a créé la session PSSession ou la configuration de session utilisée par psSession inclut des informations d’identification RunAs. Sinon, vous pouvez obtenir, vous connecter à, utiliser et gérer uniquement les sessions PSSession que vous avez créées.
Puis-je Connecter à une session PSSession à partir d’un autre ordinateur ?
À compter de Windows PowerShell 3.0, les sessions PSSession sur les ordinateurs Windows sont indépendantes des sessions dans lesquelles elles ont été créées. Les sessions PSSession actives sont conservées sur l’ordinateur à distance ou côté serveur d’une connexion.
Sur un ordinateur Windows, vous pouvez utiliser l’applet Disconnect-PSSession
de commande pour vous déconnecter d’une session PSSession. La session PSSession est déconnectée de la session locale, mais elle est conservée sur l’ordinateur distant.
Les commandes continuent à s’exécuter dans la session PSSession déconnectée. Vous pouvez fermer PowerShell et arrêter l’ordinateur d’origine sans interrompre la session PSSession.
Ensuite, même des heures plus tard, vous pouvez utiliser l’applet Get-PSSession
de commande pour obtenir PSSession et l’applet Connect-PSSession
de commande pour vous connecter à PSSession à partir d’une nouvelle session sur un autre ordinateur Windows.
Pour plus d’informations, consultez about_Remote_Disconnected_Sessions.
Que se passe-t-il à mon PSSession si mon ordinateur s’arrête ?
Les sessions PSSession déconnectées sont indépendantes des sessions dans lesquelles elles ont été créées. Si vous déconnectez une session PSSession, puis fermez l’ordinateur d’origine, la session PSSession est conservée sur l’ordinateur distant.
En outre, PowerShell tente de récupérer des sessions PSSession actives qui sont déconnectées involontairement, par exemple par un redémarrage de l’ordinateur, une panne d’alimentation temporaire ou une interruption réseau. PowerShell tente de maintenir ou de récupérer la session PSSession dans un état Ouvert, si la session d’origine est toujours disponible ou à un état déconnecté s’il n’en est pas.
Une session PSSession « active » est une session qui exécute des commandes. Si une session PSSession est connectée (non déconnectée) et que les commandes s’exécutent dans la session PSSession lorsque la session connectée se ferme, PowerShell tente de maintenir la session PSSession sur l’ordinateur distant. Toutefois, si aucune commande n’est en cours d’exécution dans la session PSSession, PowerShell ferme la session PSSession lorsque la session connectée se ferme.
Pour plus d’informations, consultez about_Remote_Disconnected_Sessions.
Puis-je exécuter un travail en arrière-plan dans une session PSSession ?
Oui. Un travail en arrière-plan est une commande qui s’exécute de manière asynchrone en arrière-plan sans interagir avec la session active. Lorsque vous envoyez une commande pour démarrer un travail, la commande retourne un objet de travail, mais le travail continue à s’exécuter en arrière-plan jusqu’à ce qu’il soit terminé.
Pour démarrer un travail en arrière-plan sur un ordinateur local, utilisez la Start-Job
commande.
Vous pouvez exécuter le travail en arrière-plan dans une connexion temporaire (à l’aide du paramètre ComputerName ) ou dans une session PSSession (à l’aide du paramètre Session ).
Pour démarrer un travail en arrière-plan sur un ordinateur distant, utilisez l’applet Invoke-Command
de commande avec son paramètre AsJob ou utilisez l’applet Invoke-Command
de commande pour exécuter une Start-Job
commande sur un ordinateur distant. Lorsque vous utilisez le paramètre AsJob , vous pouvez utiliser les paramètres ComputerName ou Session .
Lorsque vous utilisez Invoke-Command
pour exécuter une Start-Job
commande, vous devez exécuter la commande dans une session PSSession. Si vous utilisez le paramètre ComputerName , PowerShell met fin à la connexion lorsque l’objet de travail retourne, et le travail est interrompu.
Pour plus d’informations, consultez à propos des_tâches.
Puis-je exécuter une session interactive ?
Oui. Pour démarrer une session interactive avec un ordinateur distant, utilisez l’applet de Enter-PSSession
commande. Dans une session interactive, les commandes que vous tapez s’exécutent sur l’ordinateur distant, comme si vous les avez tapées directement sur l’ordinateur distant.
Vous pouvez exécuter une session interactive dans une session temporaire (à l’aide du paramètre ComputerName ) ou dans une session PSSession (à l’aide du paramètre Session ). Si vous utilisez une session PSSession, psSession conserve les données des commandes précédentes et la session PSSession conserve toutes les données générées pendant la session interactive à utiliser dans les commandes ultérieures.
Lorsque vous terminez la session interactive, la session PSSession reste ouverte et disponible à utiliser.
Pour plus d’informations, consultez Entrée-PSSession et Exit-PSSession.
Dois-je supprimer les sessions PSSession ?
Oui. Une session PSSession est un processus, qui est un environnement autonome qui utilise la mémoire et d’autres ressources même si vous ne l’utilisez pas. Lorsque vous avez terminé d’utiliser une session PSSession, supprimez-la. Si vous créez plusieurs sessions PSSession, fermez celles que vous n’utilisez pas et conservez uniquement celles actuellement utilisées.
Pour supprimer des sessions PSSession, utilisez l’applet de Remove-PSSession
commande. Il supprime les sessions PSSession et libère toutes les ressources qu’ils utilisaient.
Vous pouvez également utiliser le paramètre IdleTimeOut pour New-PSSessionOption
fermer une session PSSession inactive après un intervalle que vous spécifiez. Pour plus d’informations, consultez New-PSSessionOption.
Si vous enregistrez un objet PSSession dans une variable, puis supprimez psSession ou laissez-le expirer, la variable contient toujours l’objet PSSession, mais la session PSSession n’est pas active et ne peut pas être utilisée ou réparée.
Toutes les sessions et les sessions PSSessions sont-elles identiques ?
Non. Les développeurs peuvent créer des sessions personnalisées qui incluent uniquement des fournisseurs et des applets de commande sélectionnés. Si une commande fonctionne dans une session, mais pas dans une autre, cela peut être dû au fait que la session est restreinte.