Dela via


Enter-PSHostProcess

Ansluter till och går in i en interaktiv session med en lokal process.

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

Description

Cmdleten Enter-PSHostProcess ansluter till och går in i en interaktiv session med en lokal process. Från och med PowerShell 6.2 stöds den här cmdleten på andra plattformar än Windows.

I stället för att skapa en ny process för att vara värd för PowerShell och köra en fjärrsession körs den interaktiva fjärrsessionen i en befintlig process som redan kör PowerShell. När du interagerar med en fjärrsession i en angiven process kan du räkna upp körningskörningar och sedan välja ett körningsutrymme som ska felsökas genom att köra antingen Debug-Runspace eller Enable-RunspaceDebug.

Den process som du vill ange måste vara värd för PowerShell (System.Management.Automation.dll). Du måste antingen vara medlem i gruppen Administratörer på den dator där processen hittas, eller så måste du vara den användare som kör skriptet som startade processen.

När du har valt ett körningsutrymme som ska felsökas öppnas en fjärrfelsökningssession för körningsytan om den antingen kör ett kommando eller stoppas i felsökningsprogrammet. Du kan sedan felsöka runspace-skriptet på samma sätt som du felsöker andra fjärrsessionsskript.

Koppla från en felsökningssession och sedan den interaktiva sessionen med processen genom att köra avsluta två gånger eller stoppa skriptkörningen genom att köra det befintliga kommandot för att avsluta felsökningsprogrammet.

Om du anger en process med parametern Name och det bara finns en process med det angivna namnet anges processen. Om mer än en process med det angivna namnet hittas returnerar PowerShell ett fel och visar en lista över alla processer som hittades med det angivna namnet.

För att stödja anslutning till processer på fjärrdatorer är cmdleten Enter-PSHostProcess aktiverad på en angiven fjärrdator, så att du kan ansluta till en lokal process i en powershell-fjärrsession.

Exempel

Exempel del 1: Börja felsöka en runspace i PowerShell ISE-processen

I det här exemplet kör du Enter-PSHostProcess inifrån PowerShell-konsolen för att ange PowerShell ISE-processen. I den resulterande interaktiva sessionen hittar du ett körningsutrymme som du vill felsöka genom att köra Get-Runspaceoch sedan felsöka körningsytan.

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

Exempel del 2: Felsöka en specifik runspace

Därefter felsöker du runspace ID 4, som kör en annan användares långvariga skript. I listan som returneras från Get-Runspacebör du observera att runspace State är Öppnad och Tillgänglighet är Upptagen, vilket innebär att körningsytan fortfarande kör det långvariga skriptet. De runspace-objekt som returneras av Get-Runspace har också en NoteProperty- med namnet ScriptStackTrace för den körningskommandostacken, om det är tillgängligt.

[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:\>

Starta en interaktiv felsökningssession med den här körningsytan genom att köra cmdleten Debug-Runspace.

Exempel del 3: Slutför felsökningssessionen och avsluta

När du är klar med felsökningen tillåter du att skriptet fortsätter att köras utan att felsökaren är ansluten genom att köra kommandot exit debugger. Du kan också avsluta felsökningsprogrammet med q- eller Stop-kommandona.

När du är klar med processen avslutar du processen genom att köra cmdleten Exit-PSHostProcess. Då återgår du till PS C:\> fråga.

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

Parametrar

-AppDomainName

Anger ett programdomännamn som ska anslutas till om det utelämnas, använder DefaultAppDomain. Använd Get-PSHostProcessInfo för att visa programdomännamnen.

Typ:String
Position:1
Standardvärde:DefaultAppDomain
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-CustomPipeName

Hämtar eller anger det anpassade namn på pipe som ska anslutas till. Detta används vanligtvis tillsammans med pwsh -CustomPipeName.

Den här parametern introducerades i PowerShell 6.2.

Typ:String
Position:Named
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-HostProcessInfo

Anger ett PSHostProcessInfo objekt som kan anslutas till med PowerShell. Använd Get-PSHostProcessInfo för att hämta objektet.

Typ:PSHostProcessInfo
Position:0
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:True
Godkänn jokertecken:False

-Id

Anger en process enligt process-ID:t. Om du vill hämta ett process-ID kör du cmdleten Get-Process.

Typ:Int32
Position:0
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-Name

Anger en process med processnamnet. Kör cmdleten Get-Process för att hämta ett processnamn. Du kan också hämta processnamn från dialogrutan Egenskaper för en process i Aktivitetshanteraren.

Typ:String
Position:0
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-Process

Anger en process av processobjektet. Det enklaste sättet att använda den här parametern är att spara resultatet av ett Get-Process kommando som returnerar processen som du vill ange i en variabel och sedan ange variabeln som värdet för den här parametern.

Typ:Process
Position:0
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:True
Godkänn jokertecken:False

Indata

Process

Kommentarer

Enter-PSHostProcess kan inte ange processen för den PowerShell-session där du kör kommandot. Du kan dock ange processen för en annan PowerShell-session eller en PowerShell ISE-session som körs samtidigt som den session där du kör Enter-PSHostProcess.

Enter-PSHostProcess kan bara ange de processer som är värdar för PowerShell. De har alltså läst in PowerShell-motorn.

Om du vill avsluta en process inifrån processen skriver du avslutaoch trycker sedan på Retur.

Före PowerShell 7.1 hade fjärrkommunikation via SSH inte stöd för fjärrsessioner med andra hopp. Den här funktionen var begränsad till sessioner med WinRM. Med PowerShell 7.1 kan Enter-PSSession och Enter-PSHostProcess fungera inifrån alla interaktiva fjärrsessioner.