Delen via


Enter-PSHostProcess

Maakt verbinding met een interactieve sessie en voert deze in met een lokaal proces.

Syntaxis

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>]

Description

De cmdlet Enter-PSHostProcess maakt verbinding met een interactieve sessie en voert deze in met een lokaal proces.

In plaats van een nieuw proces te maken om Windows PowerShell te hosten en een externe sessie uit te voeren, wordt de externe, interactieve sessie uitgevoerd in een bestaand proces waarop Windows PowerShell al wordt uitgevoerd. Wanneer u communiceert met een externe sessie in een opgegeven proces, kunt u actieve runspaces inventariseren en vervolgens een runspace selecteren om fouten op te sporen door Debug-Runspace of Enable-RunspaceDebug uit te voeren.

Het proces dat u wilt invoeren, moet Windows PowerShell (System.Management.Automation.dll) hosten. U moet lid zijn van de groep Administrators op de computer waarop het proces wordt gevonden, of u moet de gebruiker zijn die het script uitvoert waarmee het proces is gestart.

Nadat u een runspace hebt geselecteerd om fouten op te sporen, wordt er een externe foutopsporingssessie geopend voor de runspace als deze momenteel een opdracht uitvoert of wordt gestopt in het foutopsporingsprogramma. Vervolgens kunt u fouten opsporen in het runspace-script op dezelfde manier als u fouten in andere externe sessiescripts zou opsporen.

Loskoppelen van een foutopsporingssessie en vervolgens de interactieve sessie met het proces, door twee keer afsluiten uit te voeren of de uitvoering van scripts stoppen door de bestaande foutopsporingsprogramma-opdracht uit te voeren.

Als u een proces opgeeft met behulp van de parameter Name en er slechts één proces is gevonden met de opgegeven naam, wordt het proces ingevoerd. Als er meer dan één proces met de opgegeven naam wordt gevonden, retourneert Windows PowerShell een fout en worden alle processen weergegeven die zijn gevonden met de opgegeven naam.

Ter ondersteuning van het koppelen aan processen op externe computers is de cmdlet Enter-PSHostProcess ingeschakeld op een opgegeven externe computer, zodat u verbinding kunt maken met een lokaal proces binnen een externe Windows PowerShell-sessie.

Voorbeelden

Voorbeeld 1: Foutopsporing starten in een runspace binnen het Windows PowerShell ISE-proces

In this example, you run **Enter-PSHostProcess** from within the Windows PowerShell console to enter the Windows PowerShell ISE process. In the resulting interactive session, you can find a runspace that you want to debug by running Get-Runspace, and then debug the runspace.
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:\>

Parameters

-AppDomainName

Type:String
Position:1
Default value:None
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-HostProcessInfo

Type:PSHostProcessInfo
Position:0
Default value:None
Vereist:True
Pijplijninvoer accepteren:True
Jokertekens accepteren:False

-Id

Hiermee geeft u een proces op basis van de proces-id. Voer de Get-Process cmdlet uit om een proces-id op te halen.

Type:Int32
Position:0
Default value:None
Vereist:True
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-Name

Hiermee geeft u een proces op basis van de procesnaam. Voer de Get-Process-cmdlet uit om een procesnaam op te halen. U kunt ook procesnamen ophalen uit het dialoogvenster Eigenschappen van een proces in Taakbeheer.

Type:String
Position:0
Default value:None
Vereist:True
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-Process

Hiermee geeft u een proces door het procesobject. De eenvoudigste manier om deze parameter te gebruiken, is het opslaan van de resultaten van een Get-Process opdracht die het proces retourneert dat u in een variabele wilt invoeren en geef vervolgens de variabele op als de waarde van deze parameter.

Type:Process
Position:0
Default value:None
Vereist:True
Pijplijninvoer accepteren:True
Jokertekens accepteren:False

Invoerwaarden

Process

Notities

  • Enter-PSHostProcess kan het proces van de Windows PowerShell-sessie waarin u de opdracht uitvoert, niet invoeren. U kunt echter het proces van een andere Windows PowerShell-sessie of een Windows PowerShell ISE-sessie invoeren die tegelijkertijd wordt uitgevoerd als de sessie waarin u Enter-PSHostProcessuitvoert.

    Enter-PSHostProcess kunnen alleen processen invoeren die als host fungeren voor Windows PowerShell. Dat wil gezegd, ze hebben de Windows PowerShell-engine geladen.

    Als u een proces wilt afsluiten vanuit het proces, typt u afsluiten en drukt u op Enter.