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-Runspace
e 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-Runspace
si 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
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.