Compartilhar via


Enter-PSHostProcess

Conecta-se e entra em uma sessão interativa com um processo local.

Sintaxe

ProcessIdParameterSet (Default)

Enter-PSHostProcess
    [-Id] <Int32>
    [[-AppDomainName] <String>]
    [<CommonParameters>]

ProcessParameterSet

Enter-PSHostProcess
    [-Process] <Process>
    [[-AppDomainName] <String>]
    [<CommonParameters>]

ProcessNameParameterSet

Enter-PSHostProcess
    [-Name] <String>
    [[-AppDomainName] <String>]
    [<CommonParameters>]

PSHostProcessInfoParameterSet

Enter-PSHostProcess
    [-HostProcessInfo] <PSHostProcessInfo>
    [[-AppDomainName] <String>]
    [<CommonParameters>]

PipeNameParameterSet

Enter-PSHostProcess
    -CustomPipeName <String>
    [<CommonParameters>]

Description

O cmdlet Enter-PSHostProcess se conecta e entra em uma sessão interativa com um processo local. A partir do PowerShell 6.2, esse cmdlet tem suporte em plataformas que não são do Windows.

Em vez de criar um novo processo para hospedar o PowerShell e executar uma sessão remota, a sessão remota e interativa é executada em um processo existente que já está executando o PowerShell. Ao interagir com uma sessão remota em um processo especificado, você pode enumerar runspaces em execução e selecionar um runspace para depurar executando Debug-Runspace ou Enable-RunspaceDebug.

O processo que você deseja inserir deve estar hospedando o PowerShell (System.Management.Automation.dll). Você deve ser um membro do grupo Administradores no computador no qual o processo foi encontrado ou deve ser o usuário que está executando o script que iniciou o processo.

Depois de selecionar um runspace para depurar, uma sessão de depuração remota será aberta para o runspace se ele estiver executando um comando no momento ou estiver parado no depurador. Em seguida, você pode depurar o script de runspace da mesma forma que depuraria outros scripts de sessão remota.

Desanexe de uma sessão de depuração e, em seguida, a sessão interativa com o processo, executando a saída duas vezes ou interrompa a execução do script executando o comando de encerramento do depurador existente.

Se você especificar um processo usando o parâmetro Name e houver apenas um processo encontrado com o nome especificado, o processo será inserido. Se mais de um processo com o nome especificado for encontrado, o PowerShell retornará um erro e listará todos os processos encontrados com o nome especificado.

Para dar suporte à anexação a processos em computadores remotos, o cmdlet Enter-PSHostProcess está habilitado em um computador remoto especificado, para que você possa anexar a um processo local em uma sessão remota do PowerShell.

Exemplos

Exemplo parte 1: iniciar a depuração de um runspace dentro do processo do ISE do PowerShell

Neste exemplo, você executa Enter-PSHostProcess de dentro do console do PowerShell para inserir o processo ise do PowerShell. Na sessão interativa resultante, você pode encontrar um runspace que deseja depurar executando Get-Runspacee, em seguida, depurar o runspace.

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

Exemplo de parte 2: Depurar um runspace específico

Em seguida, depure a ID do runspace 4, que está executando o script de execução longa de outro usuário. Na lista retornada de Get-Runspace, observe que o runspace State está Aberto e de Disponibilidade está Ocupado, o que significa que o runspace ainda está executando o script de execução longa. Os objetos de runspace retornados por Get-Runspace também têm um NoteProperty chamado ScriptStackTrace da pilha de comandos em execução, se disponível.

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

Inicie uma sessão de depuração interativa com esse runspace executando o cmdlet Debug-Runspace.

Exemplo de parte 3: concluir a sessão de depuração e sair

Após concluir a depuração, permita que o script continue em execução sem o depurador anexado executando o comando de depurador de saída. Como alternativa, você pode sair do depurador com os comandos q ou Stop.

Quando terminar de trabalhar no processo, saia do processo executando o cmdlet Exit-PSHostProcess. Isso retorna você para o prompt de PS C:\>.

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

Parâmetros

-AppDomainName

Especifica um nome de domínio de aplicativo ao qual se conectar se omitido, usa DefaultAppDomain. Use Get-PSHostProcessInfo para exibir os nomes de domínio do aplicativo.

Propriedades do parâmetro

Tipo:String
Valor padrão:DefaultAppDomain
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

ProcessIdParameterSet
Cargo:1
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False
ProcessParameterSet
Cargo:1
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False
ProcessNameParameterSet
Cargo:1
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False
PSHostProcessInfoParameterSet
Cargo:1
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

-CustomPipeName

Obtém ou define o nome do pipe nomeado personalizado ao qual se conectar. Isso geralmente é usado em conjunto com pwsh -CustomPipeName.

Esse parâmetro foi introduzido no PowerShell 6.2.

Propriedades do parâmetro

Tipo:String
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

PipeNameParameterSet
Cargo:Named
Obrigatório:True
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

-HostProcessInfo

Especifica um objeto PSHostProcessInfo que pode ser conectado ao PowerShell. Use Get-PSHostProcessInfo para obter o objeto.

Propriedades do parâmetro

Tipo:PSHostProcessInfo
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

PSHostProcessInfoParameterSet
Cargo:0
Obrigatório:True
Valor do pipeline:True
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

-Id

Especifica um processo pela ID do processo. Para obter uma ID do processo, execute o cmdlet Get-Process.

Propriedades do parâmetro

Tipo:Int32
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

ProcessIdParameterSet
Cargo:0
Obrigatório:True
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

-Name

Especifica um processo pelo nome do processo. Para obter um nome de processo, execute o cmdlet Get-Process. Você também pode obter nomes de processo na caixa de diálogo Propriedades de um processo no Gerenciador de Tarefas.

Propriedades do parâmetro

Tipo:String
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

ProcessNameParameterSet
Cargo:0
Obrigatório:True
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

-Process

Especifica um processo pelo objeto de processo. A maneira mais simples de usar esse parâmetro é salvar os resultados de um comando Get-Process que retorna o processo que você deseja inserir em uma variável e especificar a variável como o valor desse parâmetro.

Propriedades do parâmetro

Tipo:Process
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

ProcessParameterSet
Cargo:0
Obrigatório:True
Valor do pipeline:True
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

CommonParameters

Este cmdlet suporta os parâmetros comuns: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Para obter mais informações, consulte about_CommonParameters.

Entradas

Process

Observações

Enter-PSHostProcess não é possível inserir o processo da sessão do PowerShell na qual você está executando o comando. No entanto, você pode inserir o processo de outra sessão do PowerShell ou uma sessão ISE do PowerShell em execução ao mesmo tempo que a sessão em que você está executando Enter-PSHostProcess.

Enter-PSHostProcess pode inserir somente os processos que hospedam o PowerShell. Ou seja, eles carregaram o mecanismo do PowerShell.

Para sair de um processo de dentro do processo, digite saire pressione Enter.

Antes do PowerShell 7.1, a comunicação remota via SSH não suportava sessões remotas de segundo salto. Essa funcionalidade foi limitada a sessões usando o WinRM. O PowerShell 7.1 permite que Enter-PSSession e Enter-PSHostProcess funcionem de dentro de qualquer sessão remota interativa.