다음을 통해 공유


Enter-PSHostProcess

로컬 프로세스를 사용하여 대화형 세션에 연결하고 입력합니다.

구문

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

cmdlet은 Enter-PSHostProcess 로컬 프로세스를 사용하여 대화형 세션에 연결하고 입력합니다.

PowerShell을 호스트하고 원격 세션을 실행하는 새 프로세스를 만드는 대신 이미 PowerShell을 실행 중인 기존 프로세스에서 원격 대화형 세션이 실행됩니다. 지정된 프로세스에서 원격 세션과 상호 작용하는 경우 실행 중인 Runspace를 열거한 다음 실행 중 하나를 Debug-Runspace Enable-RunspaceDebug실행하여 디버그할 Runspace를 선택할 수 있습니다.

입력하려는 프로세스는 PowerShell(System.Management.Automation.dll)을 호스팅해야 합니다. 프로세스를 찾은 컴퓨터에서 Administrators 그룹의 구성원이거나 프로세스를 시작한 스크립트를 실행하는 사용자여야 합니다.

디버그할 Runspace를 선택한 후 현재 명령을 실행 중이거나 디버거에서 중지된 경우 Runspace에 대한 원격 디버그 세션이 열립니다. 그런 다음 다른 원격 세션 스크립트를 디버그하는 것과 동일한 방식으로 Runspace 스크립트를 디버그할 수 있습니다.

종료를 두 번 실행하여 디버깅 세션에서 분리한 다음 프로세스와 대화형 세션을 분리하거나 기존 디버거 종료 명령을 실행하여 스크립트 실행을 중지합니다.

Name 매개 변수를 사용하여 프로세스를 지정하고 지정된 이름을 가진 프로세스가 하나만 있으면 프로세스가 입력됩니다. 지정된 이름을 가진 프로세스가 두 개 이상 있으면 PowerShell에서 오류를 반환하고 지정된 이름으로 찾은 모든 프로세스를 나열합니다.

원격 컴퓨터 Enter-PSHostProcess 의 프로세스에 연결할 수 있도록 cmdlet은 지정된 원격 컴퓨터에서 사용하도록 설정되므로 원격 PowerShell 세션 내의 로컬 프로세스에 연결할 수 있습니다.

예제

예제 1부: PowerShell ISE 프로세스 내에서 Runspace 디버깅 시작

이 예제에서는 PowerShell 콘솔 내에서 실행 Enter-PSHostProcess 하여 PowerShell ISE 프로세스를 입력합니다. 결과 대화형 세션에서 실행 Get-Runspace하여 디버그할 Runspace를 찾은 다음, 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

예제 2부: 특정 Runspace 디버그

다음으로, 다른 사용자의 장기 실행 스크립트를 실행하는 Runspace ID 4를 디버그합니다. 반환된 Get-Runspace목록에서 Runspace 상태가 열리고 가용성이 사용 중입니다 . 즉, Runspace가 여전히 장기 실행 스크립트를 실행하고 있음을 의미합니다. 또한 반환된 Get-Runspace Runspace 개체에는 실행 중인 명령 스택의 ScriptStackTrace라는 NoteProperty가 있습니다(사용 가능한 경우).

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

cmdlet을 실행 Debug-Runspace 하여 이 Runspace에서 대화형 디버깅 세션을 시작합니다.

예제 3부: 디버깅 세션 완료 및 종료

디버깅을 완료한 후 종료 디버거 명령을 실행하여 디버거가 연결되지 않은 상태에서 스크립트가 계속 실행되도록 합니다. 또는 q 또는 Stop 명령을 사용하여 디버거를 종료할 수 있습니다.

프로세스 작업을 마치면 cmdlet을 실행 Exit-PSHostProcess 하여 프로세스를 종료합니다. 그러면 프롬프트가 PS C:\> 표시됩니다.

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

매개 변수

-AppDomainName

생략하면 연결할 애플리케이션 도메인 이름을 지정하고 DefaultAppDomain을 사용합니다. 애플리케이션 도메인 이름을 표시하는 데 사용합니다 Get-PSHostProcessInfo .

형식:String
Position:1
Default value:DefaultAppDomain
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-HostProcessInfo

PowerShell을 사용하여 연결할 수 있는 PSHostProcessInfo 개체를 지정합니다. 개체를 가져오는 데 사용합니다 Get-PSHostProcessInfo .

형식:PSHostProcessInfo
Position:0
Default value:None
필수:True
파이프라인 입력 허용:True
와일드카드 문자 허용:False

-Id

프로세스 ID별로 프로세스를 지정합니다. 프로세스 ID를 가져오려면 cmdlet을 Get-Process 실행합니다.

형식:Int32
Position:0
Default value:None
필수:True
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-Name

프로세스 이름을 사용하여 프로세스를 지정합니다. 프로세스 이름을 얻으려면 cmdlet을 Get-Process 실행합니다. 작업 관리자에서 프로세스의 속성 대화 상자에서 프로세스 이름을 가져올 수도 있습니다.

형식:String
Position:0
Default value:None
필수:True
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-Process

프로세스 개체의 프로세스를 지정합니다. 이 매개 변수를 사용하는 가장 간단한 방법은 변수에 입력하려는 프로세스를 반환하는 명령의 Get-Process 결과를 저장한 다음 변수를 이 매개 변수의 값으로 지정하는 것입니다.

형식:Process
Position:0
Default value:None
필수:True
파이프라인 입력 허용:True
와일드카드 문자 허용:False

입력

Process

참고

Enter-PSHostProcess 명령을 실행하는 PowerShell 세션의 프로세스를 입력할 수 없습니다. 그러나 다른 PowerShell 세션 또는 실행 Enter-PSHostProcess중인 세션과 동시에 실행되는 PowerShell ISE 세션의 프로세스를 입력할 수 있습니다.

Enter-PSHostProcess 는 PowerShell을 호스팅하는 프로세스만 입력할 수 있습니다. 즉, PowerShell 엔진을 로드했습니다.

프로세스 내에서 프로세스를 종료하려면 종료를 입력한 다음 Enter 키를 누릅니.