Freigeben über


about_PSSession_Details

Kurze Beschreibung

Enthält ausführliche Informationen zu PowerShell-Sitzungen und der Rolle, die sie bei Remotebefehlen spielen.

Lange Beschreibung

Eine Sitzung ist eine Umgebung, in der PowerShell ausgeführt wird. Eine Sitzung wird für Sie erstellt, wenn Sie PowerShell starten. Sie können zusätzliche Sitzungen erstellen, die als "PowerShell-Sitzungen" oder "PSSessions" bezeichnet werden, auf Ihrem Computer oder einem anderen Computer.

Im Gegensatz zu den Sitzungen, die PowerShell für Sie erstellt, steuern und verwalten Sie die von Ihnen erstellten PSSessions.

PSSessions spielen eine wichtige Rolle beim Remote computing. Wenn Sie eine PSSession erstellen, die mit einem Remotecomputer verbunden ist, stellt PowerShell eine dauerhafte Verbindung mit dem Remotecomputer her, um die PSSession zu unterstützen. Sie können die PSSession verwenden, um eine Reihe von Befehlen, Funktionen und Skripts auszuführen, die Daten gemeinsam nutzen.

Dieses Thema enthält ausführliche Informationen zu Sitzungen und PSSessions in PowerShell. Grundlegende Informationen zu den Aufgaben, die Sie mit Sitzungen ausführen können, finden Sie unter about_PSSessions.

Informationen zu Sitzungen

Technisch gesehen ist eine Sitzung eine Ausführungsumgebung, in der PowerShell ausgeführt wird. Jede Sitzung enthält eine instance der System.Management.Automation-Engine und ein Hostprogramm, in dem PowerShell ausgeführt wird. Der Host kann die vertraute PowerShell-Konsole oder ein anderes Programm sein, das Befehle wie Cmd.exe ausführt, oder ein Programm, das zum Hosten von PowerShell erstellt wurde, z. B. Windows PowerShell Integrated Scripting Environment (ISE). Aus Windows-Sicht ist eine Sitzung ein Windows-Prozess auf dem Zielcomputer.

Jede Sitzung wird unabhängig voneinander konfiguriert. Sie enthält eigene Eigenschaften, eine eigene Ausführungsrichtlinie und eigene Profile. Die Umgebung, die beim Erstellen der Sitzung vorhanden ist, wird für ihre Lebensdauer beibehalten, auch wenn Sie die Umgebung auf dem Computer ändern. Alle Sitzungen werden in einem globalen Bereich erstellt, auch Sitzungen, die Sie in einem Skript erstellen.

Sie können jeweils nur einen Befehl (oder eine Befehlspipeline) in einer Sitzung ausführen. Ein zweiter Befehl, der synchron (nacheinander) ausgeführt wird, wartet bis zu vier Minuten, bis der erste Befehl abgeschlossen ist. Ein zweiter Befehl, der asynchron (gleichzeitig) ausgeführt wird, schlägt fehl.

Informationen zu PSSessions

Bei jedem Start von PowerShell wird eine Sitzung erstellt. Außerdem erstellt PowerShell temporäre Sitzungen, um einzelne Befehle auszuführen. Sie können jedoch auch Sitzungen (als "PowerShell-Sitzungen" oder "PSSessions" bezeichnet) erstellen, die Sie steuern und verwalten.

PSSessions sind für Remotebefehle von entscheidender Bedeutung. Wenn Sie den ComputerName-Parameter der Invoke-Command Cmdlets oder Enter-PSSession verwenden, richtet PowerShell eine temporäre Sitzung zum Ausführen des Befehls ein und schließt die Sitzung, sobald der Befehl oder die interaktive Sitzung abgeschlossen ist.

Wenn Sie jedoch das New-PSSession Cmdlet zum Erstellen einer PSSession verwenden, richtet PowerShell eine persistente Sitzung auf dem Remotecomputer ein, in der Sie mehrere Befehle oder interaktive Sitzungen ausführen können. Die von Ihnen erstellten PSSessions bleiben geöffnet und stehen zur Verwendung zur Verfügung, bis Sie sie löschen oder die Sitzung schließen, in der sie erstellt wurden.

Wenn Sie eine PSSession auf einem Remotecomputer erstellen, erstellt das System einen PowerShell-Prozess auf dem Remotecomputer und stellt eine Verbindung zwischen dem lokalen Computer und dem Prozess auf dem Remotecomputer her. Wenn Sie eine PSSession auf dem lokalen Computer erstellen, werden sowohl der neue Prozess als auch die Verbindungen auf dem lokalen Computer erstellt.

Wann benötige ich eine PSSession?

Die Invoke-Command Cmdlets und Enter-PSSession verfügen über die Parameter ComputerName und Session . Sie können beide verwenden, um einen Remotebefehl auszuführen.

Verwenden Sie den ComputerName-Parameter , um einen einzelnen Befehl oder eine Reihe nicht verwandter Befehle auf einem oder mehreren Computern auszuführen.

Zum Ausführen von Befehlen, die Daten freigeben, benötigen Sie eine dauerhafte Verbindung mit dem Remotecomputer. Erstellen Sie in diesem Fall eine PSSession, und verwenden Sie dann den Session-Parameter , um Befehle in psSession auszuführen.

Viele andere Cmdlets, die Daten von Remotecomputern abrufen, z Get-Process. B. , Get-Service, Get-EventLogund Get-WmiObject , verfügen nur über einen ComputerName-Parameter . Sie verwenden andere Technologien als PowerShell-Remoting, um Daten remote zu sammeln. Diese Cmdlets verfügen nicht über einen Session-Parameter , aber Sie können das Invoke-Command Cmdlet verwenden, um diese Befehle in einer PSSession auszuführen.

Wie Create ich eine PSSession?

Verwenden Sie das New-PSSession Cmdlet, um eine PSSession zu erstellen. Sie können verwenden New-PSSession , um eine PSSession auf einem lokalen oder Remotecomputer zu erstellen.

Kann ich eine PSSession auf einem beliebigen Computer Create?

Um eine PSSession zu erstellen, die mit einem Remotecomputer verbunden ist, muss der Computer für Remoting in PowerShell konfiguriert sein. Der aktuelle Benutzer muss Mitglied der Gruppe Administratoren auf dem Remotecomputer sein, oder der aktuelle Benutzer muss in der Lage sein, die Anmeldeinformationen eines Mitglieds der Gruppe Administratoren anzugeben. Weitere Informationen finden Sie unter about_Remote_Requirements.

Kann ich meine PSSessions in anderen Sitzungen anzeigen?

Ab Windows PowerShell 3.0 ruft der ComputerName-Parameter des Get-PSSession Cmdlets PSSessions ab, die Sie auf den angegebenen Remotecomputern erstellt haben.

Aktive PSSessions werden auf dem Remotecomputer (der "Serverseite" einer Verbindung) verwaltet und können von jeder Sitzung auf jedem Computer abgerufen werden.

Wenn Sie beispielsweise eine PSSession vom Server01-Computer zum Server02-Computer erstellen und dann zum Computer Server03 wechseln, können Sie einen Befehl wie den folgenden verwenden, um die Sitzung abzurufen.

Get-PSSession -ComputerName Server02

Selbst wenn Sie die Verbindung mit der Sitzung trennen, wird die Sitzung auf dem Remotecomputer beibehalten, bis Sie sie löschen oder ein Timeout aufweist.

In Windows PowerShell 2.0 können Sie nur die PSSessions abrufen, die Sie in der aktuellen Sitzung erstellt haben. Sie können keine PSSessions abrufen, die Sie in anderen Sitzungen erstellt haben.

Weitere Informationen finden Sie unter Get-PSSession.

Kann ich die PSSessions sehen, die andere auf meinem Computer erstellt haben?

Sie können nur die PSSessions abrufen und verwalten, die andere Benutzer erstellt haben, wenn Sie die Anmeldeinformationen des Benutzers angeben können, der die PSSession erstellt hat, oder die Sitzungskonfiguration, die von der PSSession verwendet wird, RunAs-Anmeldeinformationen enthält. Andernfalls können Sie nur die von Ihnen erstellten PSSessions abrufen, eine Verbindung herstellen, verwenden und verwalten.

Kann ich von einem anderen Computer aus eine Verbindung mit einer PSSession herstellen?

Ab Windows PowerShell 3.0 sind PSSessions auf Windows-Computern unabhängig von den Sitzungen, in denen sie erstellt wurden. Aktive PSSessions werden auf dem Computer auf der Remote- oder "Serverseite" einer Verbindung verwaltet.

Auf einem Windows-Computer können Sie das Cmdlet verwenden, um die Disconnect-PSSession Verbindung mit einer PSSession zu trennen. Die PSSession wird von der lokalen Sitzung getrennt, aber auf dem Remotecomputer verwaltet. Befehle werden weiterhin in der getrennten PSSession ausgeführt. Sie können PowerShell schließen und den Ursprünglichen Computer herunterfahren, ohne die PSSession zu unterbrechen.

Dann können Sie noch Stunden später das Cmdlet verwenden, um die Get-PSSession PSSession und das Connect-PSSession Cmdlet abzurufen, um von einer neuen Sitzung auf einem anderen Windows-Computer eine Verbindung mit der PSSession herzustellen.

Weitere Informationen finden Sie unter about_Remote_Disconnected_Sessions.

Was geschieht mit meiner PSSession, wenn mein Computer beendet wird?

Getrennte PSSessions sind unabhängig von den Sitzungen, in denen sie erstellt wurden. Wenn Sie eine PSSession trennen und dann den Ursprünglichen Computer schließen, wird die PSSession auf dem Remotecomputer verwaltet.

Darüber hinaus versucht PowerShell, aktive PSSessions wiederherzustellen, die unbeabsichtigt getrennt werden, z. B. durch einen Computerneustart, einen temporären Stromausfall oder eine Netzwerkunterbrechung. PowerShell versucht, die PSSession im Geöffneten Zustand beizubehalten oder wiederherzustellen, wenn die ursprüngliche Sitzung noch verfügbar ist, oder wenn dies nicht der Status "Getrennt" ist.

Eine "aktive" PSSession ist eine, die Befehle ausführt. Wenn eine PSSession verbunden (nicht getrennt) ist und Befehle in der PSSession ausgeführt werden, wenn die verbundene Sitzung geschlossen wird, versucht PowerShell, die PSSession auf dem Remotecomputer zu verwalten. Wenn jedoch keine Befehle in der PSSession ausgeführt werden, schließt PowerShell die PSSession, wenn die verbundene Sitzung geschlossen wird.

Weitere Informationen finden Sie unter about_Remote_Disconnected_Sessions.

Kann ich einen Hintergrundauftrag in einer PSSession ausführen?

Ja. Ein Hintergrundauftrag ist ein Befehl, der asynchron im Hintergrund ausgeführt wird, ohne mit der aktuellen Sitzung zu interagieren. Wenn Sie einen Befehl zum Starten eines Auftrags übermitteln, gibt der Befehl ein Auftragsobjekt zurück, aber der Auftrag wird weiterhin im Hintergrund ausgeführt, bis er abgeschlossen ist.

Verwenden Sie den Start-Job Befehl, um einen Hintergrundauftrag auf einem lokalen Computer zu starten. Sie können den Hintergrundauftrag in einer temporären Verbindung (mithilfe des Parameters ComputerName ) oder in einer PSSession (mithilfe des Session-Parameters ) ausführen.

Um einen Hintergrundauftrag auf einem Remotecomputer zu starten, verwenden Sie das Cmdlet mit dem Invoke-CommandAsJob-Parameter , oder verwenden Sie das Invoke-Command Cmdlet, um einen Start-Job Befehl auf einem Remotecomputer auszuführen. Wenn Sie den AsJob-Parameter verwenden, können Sie die Parameter ComputerName oder Session verwenden.

Wenn Sie zum Invoke-Command Ausführen eines Befehls verwenden Start-Job , müssen Sie den Befehl in einer PSSession ausführen. Wenn Sie den ComputerName-Parameter verwenden, beendet PowerShell die Verbindung, wenn das Auftragsobjekt zurückgibt und der Auftrag unterbrochen wird.

Weitere Informationen finden Sie unter about_Jobs.

Kann ich eine interaktive Sitzung ausführen?

Ja. Verwenden Sie das Enter-PSSession Cmdlet, um eine interaktive Sitzung mit einem Remotecomputer zu starten. In einer interaktiven Sitzung werden die eingegebenen Befehle auf dem Remotecomputer ausgeführt, so als ob Sie sie direkt auf dem Remotecomputer eingegeben haben.

Sie können eine interaktive Sitzung in einer temporären Sitzung (mithilfe des Parameters ComputerName ) oder in einer PSSession (mithilfe des Session-Parameters ) ausführen. Wenn Sie eine PSSession verwenden, behält die PSSession die Daten aus vorherigen Befehlen bei, und die PSSession behält alle Während der interaktiven Sitzung generierten Daten zur Verwendung in späteren Befehlen bei.

Wenn Sie die interaktive Sitzung beenden, bleibt die PSSession geöffnet und steht zur Verwendung zur Verfügung.

Weitere Informationen finden Sie unter Enter-PSSession und Exit-PSSession.

Muss ich die PSSessions löschen?

Ja. Eine PSSession ist ein Prozess, bei dem es sich um eine eigenständige Umgebung handelt, die Arbeitsspeicher und andere Ressourcen verwendet, auch wenn Sie ihn nicht verwenden. Wenn Sie mit einer PSSession fertig sind, löschen Sie sie. Wenn Sie mehrere PSSessions erstellen, schließen Sie die nicht verwendeten, und verwalten Sie nur die derzeit verwendeten PSSessions.

Um PSSessions zu löschen, verwenden Sie das Remove-PSSession Cmdlet. Es löscht die PSSessions und gibt alle ressourcen frei, die sie verwendet haben.

Sie können auch den IdleTimeOut-Parameter von New-PSSessionOption verwenden, um eine PSSession im Leerlauf nach einem von Ihnen angegebenen Intervall zu schließen. Weitere Informationen finden Sie unter New-PSSessionOption.

Wenn Sie ein PSSession-Objekt in einer Variablen speichern und dann die PSSession löschen oder ein Timeout zulassen, enthält die Variable weiterhin das PSSession-Objekt, aber die PSSession ist nicht aktiv und kann nicht verwendet oder repariert werden.

Sind alle Sitzungen und PSSessions gleich?

Nein. Entwickler können benutzerdefinierte Sitzungen erstellen, die nur ausgewählte Anbieter und Cmdlets enthalten. Wenn ein Befehl in einer Sitzung funktioniert, aber nicht in einer anderen, liegt dies möglicherweise daran, dass die Sitzung eingeschränkt ist.

Weitere Informationen