about_PSSession_Details
Kurze Beschreibung
Enthält detaillierte Informationen zu Windows PowerShell-Sitzungen und der Rolle, die sie in Remotebefehlen spielen.
Lange Beschreibung
Eine Sitzung ist eine Umgebung, in der Windows PowerShell ausgeführt wird. Beim Starten von Windows PowerShell wird eine Sitzung für Sie erstellt. Sie können zusätzliche Sitzungen erstellen, die als "Windows PowerShell-Sitzungen" oder "PSSessions" auf Ihrem Computer oder einem anderen Computer bezeichnet werden.
Im Gegensatz zu den Sitzungen, die Windows 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 Windows 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 freigeben.
Dieses Thema enthält ausführliche Informationen zu Sitzungen und PSSessions in Windows 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 Windows PowerShell ausgeführt wird. Jede Sitzung enthält eine Instanz des System.Management.Automation-Moduls und ein Hostprogramm, in dem Windows PowerShell ausgeführt wird. Der Host kann die vertraute Windows PowerShell-Konsole oder ein anderes Programm sein, das Befehle ausführt, z. B. Cmd.exe, oder ein Programm, das zum Hosten von Windows 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 vorhanden ist, wenn die Sitzung erstellt wird, wird während der Lebensdauer beibehalten, auch wenn Sie die Umgebung auf dem Computer ändern. Alle Sitzungen werden in einem globalen Bereich erstellt, sogar 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 wird synchron ausgeführt (jeweils eine) wartet bis zu vier Minuten, bis der erste Befehl abgeschlossen ist. Ein zweiter Befehl wird asynchron (gleichzeitig) ausgeführt.
Über PSSessions
Bei jedem Start von Windows PowerShell wird eine Sitzung erstellt. Außerdem erstellt Windows PowerShell temporäre Sitzungen zum Ausführen einzelner Befehle. Sie können jedoch auch Sitzungen (als "Windows PowerShell-Sitzungen" oder "PSSessions" bezeichnet) erstellen, die Sie steuern und verwalten.
PSSessions sind für Remotebefehle wichtig. Wenn Sie den Parameter ComputerName der Invoke-Command
Oder Enter-PSSession
Cmdlets verwenden, richtet Windows PowerShell eine temporäre Sitzung ein, um den Befehl auszuführen, und schließt dann die Sitzung, sobald der Befehl oder die interaktive Sitzung abgeschlossen ist.
Wenn Sie jedoch das New-PSSession
Cmdlet zum Erstellen einer PSSession verwenden, richtet Windows PowerShell eine dauerhafte Sitzung auf dem Remotecomputer ein, auf dem 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 bis Sie 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 vom lokalen Computer zum 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
Und Enter-PSSession
Cmdlets verfügen sowohl über ComputerName- als auch über Sitzungsparameter. Sie können entweder einen Remotebefehl ausführen.
Verwenden Sie den Parameter "ComputerName ", 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 Parameter "Session ", um Befehle in der PSSession auszuführen.
Viele andere Cmdlets, die Daten von Remotecomputern abrufen, z Get-Process
. B. , Get-Service
, Get-EventLog
und Get-WmiObject
verfügen nur über einen ComputerName-Parameter . Sie verwenden andere Technologien als Windows 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 erstelle ich eine PSSession?
Verwenden Sie das New-PSSession
Cmdlet, um eine PSSession zu erstellen. Sie können New-PSSession
eine PSSession auf einem lokalen oder Remotecomputer erstellen.
Kann ich eine PSSession auf einem beliebigen Computer erstellen?
Um eine PSSession zu erstellen, die mit einem Remotecomputer verbunden ist, muss der Computer für das Remoting in Windows PowerShell konfiguriert werden. 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 (die "serverseitige" Verbindung) verwaltet, und Sie können sie von jeder Beliebigen Sitzung auf jedem Computer abrufen.
Wenn Sie z. B. eine PSSession vom Server01-Computer auf den Server02-Computer erstellen und dann zum Server03-Computer wechseln, können Sie einen Befehl wie den folgenden verwenden, um die Sitzung abzurufen.
Get-PSSession -ComputerName Server02
Auch wenn Sie die Verbindung mit der Sitzung trennen, wird die Sitzung auf dem Remotecomputer beibehalten, bis Sie sie löschen oder es zu einem Timeout kommt.
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 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, mit diesen verbinden, verwenden und verwalten.
Kann ich eine Verbindung mit einer PSSession von einem anderen Computer herstellen?
Ab Windows PowerShell 3.0 sind PSSessions unabhängig von den Sitzungen, in denen sie erstellt wurden. Aktive PSSessions werden auf dem Computer auf der Remote- oder "Serverseite" einer Verbindung verwaltet.
Sie können das Disconnect-PSSession
Cmdlet verwenden, um die Verbindung mit einer PSSession zu trennen. Die PSSession wird von der lokalen Sitzung getrennt, wird jedoch auf dem Remotecomputer verwaltet.
Befehle werden weiterhin in der getrennten PSSession ausgeführt. Sie können Windows PowerShell schließen und den ursprünglichen Computer herunterfahren, ohne die PSSession zu unterbrechen.
Anschließend können Sie das Cmdlet auch stunden später verwenden Get-PSSession
, um die PSSession und das Connect-PSSession
Cmdlet abzurufen, um über eine neue Sitzung auf einem anderen Computer eine Verbindung mit der PSSession herzustellen.
Weitere Informationen finden Sie unter about_Remote_Disconnected_Sessions.
Was geschieht mit "Meine 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 Windows PowerShell, aktive PSSessions wiederherzustellen, die unbeabsichtigt getrennt werden, z. B. durch einen Computerneustart, einen temporären Stromausfall oder Netzwerkunterbrechungen. Windows PowerShell versucht, die PSSession in einem geöffneten Zustand beizubehalten oder wiederherzustellen, wenn die ursprüngliche Sitzung noch verfügbar ist, oder in einem nicht getrennten Zustand.
Eine "aktive" PSSession ist eine, die Befehle ausführt. Wenn eine PSSession verbunden ist (nicht getrennt) und Befehle in der PSSession ausgeführt werden, wenn die verbundene Sitzung geschlossen wird, versucht Windows PowerShell, die PSSession auf dem Remotecomputer zu verwalten. Wenn jedoch keine Befehle in der PSSession ausgeführt werden, schließt Windows 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 übermitteln, um einen Auftrag zu starten, 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 ComputersName-Parameters ) oder in einer PSSession (mithilfe des Session-Parameters ) ausführen.
Um einen Hintergrundauftrag auf einem Remotecomputer zu starten, verwenden Sie das Invoke-Command
Cmdlet mit seinem AsJob-Parameter , oder verwenden Sie das Invoke-Command
Cmdlet, um einen Start-Job
Befehl auf einem Remotecomputer auszuführen. Bei Verwendung des AsJob-Parameters können Sie die Parameter "ComputerName " oder "Session " verwenden.
Invoke-Command
Wenn Sie einen Start-Job
Befehl ausführen, müssen Sie den Befehl in einer PSSession ausführen. Wenn Sie den Parameter ComputerName verwenden, beendet Windows PowerShell die Verbindung, wenn das Auftragsobjekt zurückgegeben wird, und der Auftrag wird unterbrochen.
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 von Ihnen eingegebenen Befehle auf dem Remotecomputer genauso ausgeführt, als hätten Sie sie direkt auf dem Remotecomputer eingegeben.
Sie können eine interaktive Sitzung in einer temporären Sitzung (mithilfe des ComputersName-Parameters ) oder in einer PSSession (mithilfe des Session-Parameters ) ausführen. Wenn Sie eine PSSession verwenden, behält die PSSession die Daten aus früheren Befehlen bei, und die PSSession behält alle Während der interaktiven Sitzung generierten Daten für die Verwendung in späteren Befehlen bei.
Wenn Sie die interaktive Sitzung beenden, bleibt die PSSession geöffnet und für die Verwendung verfügbar.
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 sie nicht verwenden. Wenn Sie mit einer PSSession fertig sind, löschen Sie sie. Wenn Sie mehrere PSSessions erstellen, schließen Sie diejenigen, die Sie nicht verwenden, und verwalten Sie nur die derzeit verwendeten.
Verwenden Sie das Remove-PSSession
Cmdlet, um PSSessions zu löschen. Es löscht die PSSessions und gibt alle ressourcen frei, die sie verwendet haben.
Sie können auch den IdleTimeOut-Parameter 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 es timeout lassen, 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, aber nicht in einer anderen Sitzung funktioniert, liegt dies möglicherweise daran, dass die Sitzung eingeschränkt ist.