Condividi tramite


Enter-PSHostProcess

Si connette a e entra in una sessione interattiva con un processo locale.

Sintassi

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

Descrizione

Il Enter-PSHostProcess cmdlet si connette e entra in una sessione interattiva con un processo locale. A partire da PowerShell 6.2, questo cmdlet è supportato nelle piattaforme non Windows.

Anziché creare un nuovo processo per ospitare PowerShell ed eseguire una sessione remota, la sessione interattiva remota viene eseguita in un processo esistente che esegue già PowerShell. Quando si interagisce con una sessione remota in un processo specificato, è possibile enumerare gli spazi di esecuzione in esecuzione e quindi selezionare uno spazio di esecuzione di cui eseguire il debug eseguendo Debug-Runspace o Enable-RunspaceDebug.

Il processo da immettere deve ospitare PowerShell (System.Management.Automation.dll). È necessario essere un membro del gruppo Administrators nel computer in cui viene trovato il processo oppure è necessario essere l'utente che esegue lo script che ha avviato il processo.

Dopo aver selezionato uno spazio di esecuzione per il debug, viene aperta una sessione di debug remoto per lo spazio di esecuzione se è attualmente in esecuzione un comando o viene arrestata nel debugger. È quindi possibile eseguire il debug dello script dello spazio di esecuzione nello stesso modo in cui si eseguirà il debug di altri script di sessione remota.

Scollegarsi da una sessione di debug e quindi dalla sessione interattiva con il processo, eseguendo exit due volte o arrestare l'esecuzione dello script eseguendo il comando esistente di chiusura del debugger.

Se si specifica un processo usando il parametro Name e viene trovato un solo processo con il nome specificato, viene immesso il processo. Se vengono trovati più processi con il nome specificato, PowerShell restituisce un errore ed elenca tutti i processi trovati con il nome specificato.

Per supportare il collegamento ai processi nei computer remoti, il Enter-PSHostProcess cmdlet è abilitato in un computer remoto specificato, in modo da potersi collegare a un processo locale all'interno di una sessione remota di PowerShell.

Esempio

Parte 1 di esempio: Avviare il debug di uno spazio di esecuzione all'interno del processo di PowerShell ISE

In questo esempio si esegue Enter-PSHostProcess dall'interno della console di PowerShell per immettere il processo di PowerShell ISE. Nella sessione interattiva risultante è possibile trovare uno spazio di esecuzione di cui eseguire il debug eseguendo Get-Runspacee quindi eseguire il debug dello spazio di esecuzione.

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

Parte 2 di esempio: Eseguire il debug di uno spazio di esecuzione specifico

Eseguire quindi il debug dell'ID dello spazio di esecuzione 4, che esegue lo script a esecuzione prolungata di un altro utente. Dall'elenco restituito da Get-Runspacesi noti che lo stato dello spazio di esecuzione è Aperto e Disponibilità è occupato, ovvero lo spazio di esecuzione sta ancora eseguendo lo script a esecuzione prolungata. Gli oggetti dello spazio di esecuzione restituiti da Get-Runspace hanno anche una NotaProperty denominata ScriptStackTrace dello stack di comandi in esecuzione, se disponibile.

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

Avviare una sessione di debug interattiva con questo spazio di esecuzione eseguendo il Debug-Runspace cmdlet .

Parte 3 di esempio: Completare la sessione di debug e uscire

Al termine del debug, consentire all'esecuzione dello script senza il debugger collegato eseguendo il comando exit debugger. In alternativa, è possibile uscire dal debugger con i comandi q o Stop.

Al termine del lavoro nel processo, chiudere il processo eseguendo il Exit-PSHostProcess cmdlet . Verrà visualizzata la PS C:\> richiesta.

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

Parametri

-AppDomainName

Specifica un nome di dominio dell'applicazione a cui connettersi se omesso, usa DefaultAppDomain. Usare Get-PSHostProcessInfo per visualizzare i nomi di dominio dell'applicazione.

Tipo:String
Posizione:1
Valore predefinito:DefaultAppDomain
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-CustomPipeName

Ottiene o imposta il nome personalizzato della named pipe a cui connettersi. Questa operazione viene in genere usata insieme a pwsh -CustomPipeName.

Questo parametro è stato introdotto in PowerShell 6.2.

Tipo:String
Posizione:Named
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-HostProcessInfo

Specifica un oggetto PSHostProcessInfo a cui è possibile connettersi con PowerShell. Utilizzare Get-PSHostProcessInfo per ottenere l'oggetto .

Tipo:PSHostProcessInfo
Posizione:0
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:True
Accettare caratteri jolly:False

-Id

Specifica un processo in base all'ID processo. Per ottenere un ID processo, eseguire il Get-Process cmdlet .

Tipo:Int32
Posizione:0
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Name

Specifica un processo in base al nome del processo. Per ottenere un nome di processo, eseguire il Get-Process cmdlet . È anche possibile ottenere nomi di processo dalla finestra di dialogo Proprietà di un processo in Gestione attività.

Tipo:String
Posizione:0
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Process

Specifica un processo dall'oggetto processo. Il modo più semplice per usare questo parametro consiste nel salvare i risultati di un Get-Process comando che restituisce il processo che si vuole immettere in una variabile e quindi specificare la variabile come valore di questo parametro.

Tipo:Process
Posizione:0
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:True
Accettare caratteri jolly:False

Input

Process

Note

Enter-PSHostProcess non può immettere il processo della sessione di PowerShell in cui si esegue il comando. È tuttavia possibile immettere il processo di un'altra sessione di PowerShell o di una sessione di PowerShell ISE in esecuzione contemporaneamente alla sessione in cui si esegue Enter-PSHostProcess.

Enter-PSHostProcess può immettere solo i processi che ospitano PowerShell. Ovvero, hanno caricato il motore di PowerShell.

Per uscire da un processo dall'interno del processo, digitare exit e quindi premere INVIO.

Prima di PowerShell 7,1, la comunicazione remota tramite SSH non supportava sessioni remote con secondo hop. Questa funzionalità era limitata alle sessioni che usavano WinRM. PowerShell 7.1 consente a Enter-PSSession e Enter-PSHostProcess di funzionare dall'interno di qualsiasi sessione remota interattiva.