Enter-PSHostProcess

Verbinden mit einem lokalen Prozess zu einer interaktiven Sitzung ein.

Syntax

Enter-PSHostProcess
     [-Id] <Int32>
     [[-AppDomainName] <String>]
     [<CommonParameters>]
Enter-PSHostProcess
     [-Process] <Process>
     [[-AppDomainName] <String>]
     [<CommonParameters>]
Enter-PSHostProcess
     [-Name] <String>
     [[-AppDomainName] <String>]
     [<CommonParameters>]
Enter-PSHostProcess
     [-HostProcessInfo] <PSHostProcessInfo>
     [[-AppDomainName] <String>]
     [<CommonParameters>]
Enter-PSHostProcess
     -CustomPipeName <String>
     [<CommonParameters>]

Beschreibung

Das Enter-PSHostProcess Cmdlet stellt eine Verbindung mit einer interaktiven Sitzung mit einem lokalen Prozess in eine interaktive Sitzung ein. Ab PowerShell 6.2 wird dieses Cmdlet auf Nicht-Windows-Plattformen unterstützt.

Anstatt einen neuen Prozess zum Hosten von PowerShell zu erstellen und eine Remotesitzung auszuführen, wird die interaktive Remotesitzung in einem vorhandenen Prozess ausgeführt, der bereits PowerShell ausführt. Wenn Sie mit einer Remotesitzung in einem angegebenen Prozess interagieren, können Sie ausgeführte Runspaces aufzählen und dann einen Runspace auswählen, um zu debuggen, indem Sie entweder Debug-Runspace oder Enable-RunspaceDebug.

Der Prozess, den Sie eingeben möchten, muss PowerShell (System.Management.Automation.dll) hosten. Sie müssen entweder Mitglied der Gruppe "Administratoren" auf dem Computer sein, auf dem der Prozess gefunden wird, oder sie müssen der Benutzer sein, der das Skript ausführt, das den Prozess gestartet hat.

Nachdem Sie einen auszuführenden Runspace ausgewählt haben, wird eine Remotedebugsitzung für den Runspace geöffnet, wenn sie derzeit einen Befehl ausführt oder im Debugger beendet wird. Anschließend können Sie das Runspace-Skript auf die gleiche Weise debuggen wie andere Remotesitzungsskripts.

Trennen Sie eine Debugsitzung und dann die interaktive Sitzung mit dem Prozess, indem Sie das Beenden zweimal ausführen oder die Skriptausführung beenden, indem Sie den vorhandenen Debugger beenden-Befehl ausführen.

Wenn Sie einen Prozess mithilfe des Parameters Name angeben und nur einen Prozess mit dem angegebenen Namen gefunden wird, wird der Prozess eingegeben. Wenn mehrere Prozesse mit dem angegebenen Namen gefunden werden, gibt PowerShell einen Fehler zurück und listet alle Prozesse auf, die mit dem angegebenen Namen gefunden wurden.

Um das Anfügen an Prozesse auf Remotecomputern zu unterstützen, ist das Enter-PSHostProcess Cmdlet auf einem angegebenen Remotecomputer aktiviert, sodass Sie innerhalb einer Remote-PowerShell-Sitzung an einen lokalen Prozess anfügen können.

Beispiele

Beispielteil 1: Starten des Debuggens eines Runspaces innerhalb des PowerShell ISE-Prozesses

In diesem Beispiel führen Enter-PSHostProcess Sie in der PowerShell-Konsole aus, um den PowerShell-ISE-Prozess einzugeben. In der resultierenden interaktiven Sitzung finden Sie einen Runspace, den Sie debuggen möchten, indem Sie ausführen Get-Runspaceund dann den Runspace debuggen.

PS C:\> Enter-PSHostProcess -Name powershell_ise
[Process:1520]: PS C:\>  Get-Runspace
Id    Name          InstanceId                               State           Availability
--    -------       -----------                              ------          -------------
1     Runspace1     2d91211d-9cce-42f0-ab0e-71ac258b32b5     Opened          Available
2     Runspace2     a3855043-cb16-424a-a616-685360c3763b     Opened          RemoteDebug
3     MyLocalRS     2236dbd8-2105-4dec-a15a-a27d0bfaacb5     Opened          LocalDebug
4     MyRunspace    771356e9-8c44-4b70-9de5-dd17cb41e48e     Opened          Busy
5     Runspace8     3e517382-a97a-49ba-9c3c-fd21f6664288     Broken          None

Beispielteil 2: Debuggen eines bestimmten Runspaces

Debuggen Sie als Nächstes die Runspace-ID 4, die das lange ausgeführte Skript eines anderen Benutzers ausführt. Beachten Sie in Get-Runspaceder von der Liste zurückgegebenen Liste, dass der Runspace-Status geöffnet ist und die Verfügbarkeit beschäftigt ist, was bedeutet, dass der Runspace weiterhin das skript mit langer Ausführung ausführt. Die von Get-Runspace ihnen zurückgegebenen Runspace-Objekte verfügen auch über ein NoteProperty namens ScriptStackTrace des ausgeführten Befehlsstapels, falls verfügbar.

[Process:1520]: PS C:\>  (Get-Runspace -Id 4).ScriptStackTrace
Command                    Arguments                           Location
-------                    ---------                           --------
MyModuleWorkflowF1         {}                                  TestNoFile3.psm1: line 6
WFTest1                    {}                                  TestNoFile2.ps1: line 14
TestNoFile2.ps1            {}                                  TestNoFile2.ps1: line 22
<ScriptBlock>              {}                                  <No file>

[Process: 1520]: PS C:\>  Debug-Runspace -Id 4
Hit Line breakpoint on 'C:\TestWFVar1.ps1:83'

At C:\TestWFVar1.ps1:83 char:1
+ $scriptVar = "Script Variable"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[Process: 1520]: [RSDBG: 4]: PS C:\>

Starten Sie eine interaktive Debugsitzung mit diesem Runspace, indem Sie das Debug-Runspace Cmdlet ausführen.

Beispielteil 3: Beenden der Debugsitzung und Beenden

Nachdem Sie das Debuggen abgeschlossen haben, können Sie die Ausführung des Skripts ohne den Debugger fortsetzen, indem Sie den Exit-Debugger-Befehl ausführen. Alternativ können Sie den Debugger mit den Befehlen "q" oder "Beenden" beenden.

Wenn Sie mit der Arbeit am Prozess fertig sind, beenden Sie den Prozess, indem Sie das Exit-PSHostProcess Cmdlet ausführen. Dadurch wird die Eingabeaufforderung zurückgegeben PS C:\> .

[Process:346]: [RSDBG: 3]: PS C:\> exit
[Process:1520]: PS C:\>
[Process:1520]: PS C:\>  Exit-PSHostProcess
PS C:\>

Parameter

-AppDomainName

Gibt eine Anwendung an Standard Name, mit der beim Weglassen eine Verbindung hergestellt werden soll, verwendet DefaultAppDo Standard. Wird Get-PSHostProcessInfo verwendet, um die Anwendung anzuzeigen Standard Namen.

Type:String
Position:1
Default value:DefaultAppDomain
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CustomPipeName

Dient zum Abrufen oder Festlegen des benutzerdefinierten Benannten Pipenamens, mit dem eine Verbindung hergestellt werden soll. Dies wird in der Regel in Verbindung mit pwsh -CustomPipeName.

Dieser Parameter wurde in PowerShell 6.2 eingeführt.

Type:String
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-HostProcessInfo

Gibt ein PSHostProcessInfo -Objekt an, das mit PowerShell verbunden werden kann. Dient Get-PSHostProcessInfo zum Abrufen des Objekts.

Type:PSHostProcessInfo
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Id

Gibt einen Prozess durch die Prozess-ID an. Führen Sie das Get-Process Cmdlet aus, um eine Prozess-ID abzurufen.

Type:Int32
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Name

Gibt einen Prozess anhand des Prozessnamens an. Führen Sie das Get-Process Cmdlet aus, um einen Prozessnamen abzurufen. Sie können auch Prozessnamen aus dem Dialogfeld "Eigenschaften" eines Prozesses im Task-Manager abrufen.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Process

Gibt einen Prozess durch das Prozessobjekt an. Die einfachste Möglichkeit, diesen Parameter zu verwenden, besteht darin, die Ergebnisse eines Get-Process Befehls zu speichern, der den Prozess zurückgibt, den Sie in eine Variable eingeben möchten, und dann die Variable als Wert dieses Parameters angeben.

Type:Process
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

Eingaben

Process

Hinweise

Enter-PSHostProcess Der Prozess der PowerShell-Sitzung, in der Sie den Befehl ausführen, kann nicht eingegeben werden. Sie können jedoch den Prozess einer anderen PowerShell-Sitzung oder einer PowerShell-ISE-Sitzung eingeben, die gleichzeitig mit der Sitzung ausgeführt wird, in der Sie ausgeführt Enter-PSHostProcesswerden.

Enter-PSHostProcess kann nur die Prozesse eingeben, die PowerShell hosten. Das heißt, sie haben das PowerShell-Modul geladen.

Um einen Prozess innerhalb des Prozesses zu beenden, geben Sie "exit" ein, und drücken Sie dann die EINGABETASTE.

Vor PowerShell 7.1 unterstützte das Remoting über SSH keine Remotesitzungen über einen zweiten Hop. Diese Funktion war auf Sitzungen beschränkt, die WinRM verwendeten. PowerShell 7.1 ermöglicht, dass Enter-PSSession und Enter-PSHostProcess in jeder interaktiven Remotesitzung funktionieren.