Enter-PSHostProcess
Stellt eine Verbindung mit einer interaktiven Sitzung mit einem lokalen Prozess her und tritt in eine interaktive 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 her und tritt 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 auflisten und dann einen Runspace auswählen, der durch Ausführen Debug-Runspace
von oder Enable-RunspaceDebug
zu debuggen ist.
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 sich der Prozess befindet, oder Sie müssen der Benutzer sein, der das Skript ausführt, das den Prozess gestartet hat.
Nachdem Sie einen Runspace zum Debuggen ausgewählt haben, wird eine Remotedebugsitzung für den Runspace geöffnet, wenn er derzeit einen Befehl ausführt oder im Debugger beendet wird. Anschließend können Sie das Runspaceskript auf die gleiche Weise debuggen, wie Sie andere Remotesitzungsskripts debuggen würden.
Trennen Sie von einer Debugsitzung und dann von der interaktiven Sitzung mit dem Prozess, indem Sie exit zweimal ausführen, oder beenden Sie die Skriptausführung, indem Sie den vorhandenen Debugger beenden-Befehl ausführen.
Wenn Sie einen Prozess mit dem Parameter Name angeben und nur ein 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 gefundenen Prozesse mit dem angegebenen Namen auf.
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 PowerShell-Remotesitzung an einen lokalen Prozess anfügen können.
Beispiele
Beispiel 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 in den PowerShell ISE-Prozess zu wechseln. In der resultierenden interaktiven Sitzung finden Sie einen Runspace, den Sie debuggen möchten, indem Sie ausführen Get-Runspace
und dann den Runspace debuggen.
PS C:\> Enter-PSHostProcess -Name powershell_ise
[Process:1520]: PS C:\Test\Documents>
Next, get available runspaces within the process you have entered.
PS C:\> [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
The runspace objects returned by Get-Runspace also have a NoteProperty called ScriptStackTrace of
the running command stack, if available.Next, debug runspace ID 4, that is running another user's
long-running script. From the list returned from Get-Runspace, note that the runspace state is
Opened, and Availability is Busy, meaning that the runspace is still running the long-running
script.
PS C:\> [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>
Start an interactive debugging session with this runspace by running the Debug-Runspace cmdlet.
PS C:\> [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:\> >
After you are finished debugging, allow the script to continue running without the debugger attached
by running the exit debugger command. Alternatively, you can quit the debugger with the q or Stop
commands.
PS C:\> [Process:346]: [RSDBG: 3]: PS C:\> > exit
[Process:1520]: PS C:\>
When you are finished working in the process, exit the process by running the Exit-PSHostProcess
cmdlet. This returns you to the PS C:\> prompt.
PS C:\> [Process:1520]: PS C:\> Exit-PSHostProcess
PS C:\>
Parameter
-AppDomainName
Gibt einen Anwendungsdomänennamen an, mit dem eine Verbindung hergestellt werden soll, wenn er weggelassen wird, verwendet DefaultAppDomain. Verwenden Sie Get-PSHostProcessInfo
, um die Anwendungsdomänennamen anzuzeigen.
Type: | String |
Position: | 1 |
Default value: | DefaultAppDomain |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-CustomPipeName
Ruft den benutzerdefinierten Named Pipe-Namen ab, mit dem eine Verbindung hergestellt werden soll, oder legt diesen fest. Dies wird in der Regel in Verbindung mit pwsh -CustomPipeName
verwendet.
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, mit dem über PowerShell eine Verbindung hergestellt werden kann. Verwenden Sie Get-PSHostProcessInfo
, um das -Objekt abzurufen.
Type: | PSHostProcessInfo |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Id
Gibt einen Prozess anhand der 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 zu erhalten. Sie können Prozessnamen auch über das 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 einer Variablen eingeben möchten, und dann die Variable als Wert dieses Parameters anzugeben.
Type: | Process |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
Eingaben
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 ausführen Enter-PSHostProcess
.
Enter-PSHostProcess
kann nur die Prozesse eingeben, die PowerShell hosten. Das heißt, sie haben die PowerShell-Engine geladen.
Um einen Prozess innerhalb des Prozesses zu beenden, geben Sie exit ein, und drücken Sie dann die EINGABETASTE.