다음을 통해 공유


TShell을 사용하여 연결

TShell은 테스트 디바이스 및 VM에 연결하고 테스트를 실행하고 디버그하는 데 사용할 수 있는 Windows 시스템 키트에 포함된 PowerShell 모듈입니다.

TShell을 사용하여 연결하려면 다음이 필요합니다.

  • 네트워크에 연결된 Windows 시스템 키트가 있는 관리자 PC
  • 다음과 같은 팩터리 OS 디바이스:
    • 관리자 PC에서 네트워크를 통해 사용할 수 있습니다. 디바이스의 IP 주소를 가져오는 방법에 대한 정보는 디바이스의 IP 주소 찾기를 참조하세요.
    • TShell을 포함합니다. TShell은 WindowsCoreNonProduction.xml 기능 매니페스트의 일부인 WCOS_TEST_COMPONENTS 기능에 포함되어 있습니다. 이 기능은 기본적으로 개발 이미지에 포함되어 있습니다.

원격 PC에서 tshell을 통해 연결할 수 있음을 보여 주는 WDP 토폴로지

연결하려면

  1. 관리자 PC에서 WSK ISO를 탑재하고 WSK 빌드 환경(예: E:\SetImagGenEnv.cmd)을 관리자 권한으로 시작합니다.

  2. TShell 열기:

    E:\tshell.cmd
    
  3. 디바이스에 연결

    open-device 192.168.1.2
    

    여기서 192.168.1.2는 연결하려는 디바이스의 IP 주소입니다.

TShell cmdlet

이 섹션의 명령은 원격 디바이스와 상호 작용하는 데 사용됩니다. TShell에 연결되어 있는 동안에만 작동합니다.

각 명령을 -?로 실행하여 기본 사용법을 확인하고 help <command> -detailed를 실행하여 자세한 사용법을 확인합니다.

모든 *-Device cmdlet은 동사('-' 앞의 단어)와 문자 'd'로 별칭이 지정됩니다. 예:

Cmdlet 이름 cmdlet 별칭
Put-Device putd
Exec-Device execd
Dir-Device dird

사용할 수 있는 cmdlet

디바이스 연결 cmdlet

Cmdlet Description
open-device tshell을 대상 디바이스에 연결합니다.
close-device 연결된 대상 디바이스에서 연결 해제

디바이스 실행 cmdlet

Cmdlet Description
cmd-device(cmdd) cmd.exe 명령 실행
exec-device(execd) 실행 파일 실행

디바이스 상호 작용 cmdlet

Cmdlet Description
deploy-device(deployd) 연결된 디바이스에 테스트 패키지 배포
dir-device(dird) 디렉터리 나열
cd-device(cdd) 디바이스 디렉터리 변경
rmdir-device(rdd, rmdird) 디렉터리를 제거합니다.
copy-device(cpd, copyd) 파일 복사
del-device(deld) 파일 삭제
mkdir-device(mdd, mkdird) 새 디렉터리 만들기
move-device(mvd, moved) 파일 이동
put-device(putd) 로컬 디바이스에서 원격 디바이스로 파일 복사
get-device(getd) 원격 디바이스에서 로컬 디바이스로 파일 복사
tlist-device(tlistd) 실행 중인 각 작업에 대한 정보 표시
type-device(typed) 단말기에 있는 파일의 내용을 단말기로 출력
kill-device(killd)
reg-device(regd) 레지스트리 키와 관련된 모든 것에 사용

디바이스 및 TShell 환경에 대한 정보 가져오기

Cmdlet Description
get-variable 디바이스 디바이스 주소, 이름 및 작업 디렉터리를 표시합니다.
get-variable TShell 디바이스에 설치된 TShell 버전 표시

디버깅용 cmdlet

Cmdlet Description
debug-device(debugd) 디버그 프로세스

디바이스 연결 cmdlet

open-device: tshell을 대상 디바이스에 연결

연결을 열려면 localhost IP(기본값: 127.0.0.1)를 지정하거나 kdnet이 사용하도록 설정된 경우 MAC 주소를 사용합니다.

PS> open-device 127.0.0.1

close-device: 연결된 대상 디바이스에서 연결 해제

디바이스 작업을 마치면 연결을 닫습니다.

PS> close-device

디바이스 실행 cmdlet

cmd-device(cmdd): cmd.exe 명령 실행

TShell은 디바이스에서 cmd.exe를 통해 실행 중인 명령을 노출하고 cmd-device(cmdd) 명령을 통해 표준 출력, 표준 오류 및 종료 코드를 PowerShell 파이프라인으로 다시 파이프합니다.

PS C:\> cmd-device dir %DataDrive%\test
PS C:\> cmd-device copy %DataDrive%\test\foo %DataDrive%\test\bar
PS C:\> cmd-device del %DataDrive%\test\foo

또한 프롬프트(예: ‘복사’의 경우 /y)를 표시하지 않고 명령의 출력을 문자열로 반환하는 전용 cmdlet을 통해 몇 가지 일반적인 cmd.exe 명령을 표시합니다(참고: 이 명령은 프롬프트에서 작업할 때 편의를 위해 사용되며 PowerShell 스크립트를 작성할 때는 대신 cmd-device cmdlet을 사용해야 함).

exec-device(execd): 실행 파일 실행

디바이스에서 명령을 실행하려면 exec-device(execd) 명령을 사용합니다. 모든 스위치 이후의 전체 명령줄은 디바이스에서 있는 그대로 실행됩니다. '-'로 시작하는 프로세스에 대한 모든 인수는 따옴표(작은따옴표 또는 큰따옴표)로 전달되어야 PowerShell이 구문 분석하지 않습니다. TShell은 프로세스가 종료될 때까지 기다렸다가 콘솔에 종료 코드를 출력합니다.

PS C:\> execd windows\system32\cmd.exe
PS C:\> execd tux.exe '-d tuxdemo.dll'

큰따옴표 안의 단일 인수를 디바이스 측 프로세스에 전달하려면 TShell에 전달할 때 모든 프로세스 인수를 작은따옴표(PowerShell의 리터럴 문자열) 안에 넣어야 합니다.

PS C:\> execd tux.exe '-d tuxdemo.dll -c "arg1 arg2" -f results.log'

기본적으로 프로세스의 출력은 셸로 보내지지 않습니다. -output 스위치를 사용하여 표준 출력과 표준 오류를 모두 호스트로 파이프할 수 있습니다. 둘 다 명령 반환 값의 속성으로 반환됩니다.

PS C:\> execd -output tux.exe '-d tuxdemo.dll'

기본적으로 명령은 동기식으로 실행됩니다. 즉, TShell은 프롬프트로 돌아가기 전에 프로세스가 종료될 때까지 기다립니다. -async 스위치를 사용하여 프로세스를 비동기적으로 실행할 수 있습니다. 이 경우 TShell은 프로세스를 시작하고 즉시 반환합니다.

PS C:\> execd -async tux '-d tuxdemo.dll -f results.log'

디바이스 상호 작용 cmdlet

deploy-device(deployd): 연결된 디바이스에 테스트 패키지 배포

디바이스에 패키지를 배포하려면 deploy-device(deployd) 명령을 사용합니다.

배포 디바이스 구문
 Deploy-Device -Packages <string[]> [-PackageRootPaths <string>] [-AlternatePackageRoots <string[]>]
    [-TestToolsPath <string>] [-DeployPackageMacroOverride <string>] [-PackageCache <string>] [-Timeout <int>]
    [-OnDevice] [-TestArchitecture <string>] [<CommonParameters>]

예제:

PS C:\> Deploy-Device -Packages Microsoft.OneCore.ATest.spkg
  -packageRootPath \\server\folder
  -alternatePackageRoots c:\packages\sd.binaries.x86fre\prebuilt

자세히 알아보려면 get-help Deploy-Device -detailed를 실행합니다.

WOW 테스트 패키지를 배포하려면 -testarch 옵션을 추가합니다. 예제:

PS c:> Deploy-Device -Packages Microsoft-Windows-Test-TAEF -testarch wow64

지원되는 TestArch 입력은 amd64, x86, arm, arm64, wow64, arm64.arm, arm64.x86입니다. TestArch가 지정되지 않은 경우 기본 패키지만 배포됩니다.

dir-device(dird):list directory

원격 디바이스의 디렉터리를 나열할 수 있습니다.

dird

cd-device(cdd): 디바이스 디렉터리 변경

TShell은 디바이스에 새 디렉터리가 있는지 확인하고 없으면 오류가 발생합니다. 점-점 표기법을 사용하여 부모 디렉터리로 이동할 수 있으며, $DeviceWD 변수는 매번 업데이트됩니다.

DEVICE C:\
PS C:\> cdd test
DEVICE C:\test
PS C:\> cdd ..\windows
DEVICE C:\windows
PS C:\> cdd \
DEVICE C:\
PS C:\>

rmdir-device(rdd, rmdird):remove directory

원격 디바이스에서 폴더를 제거할 수 있습니다.

rmdird c:\foldertoremove

copy-device(cpd, copyd): 파일 복사

원격 시스템의 디렉터리 간에 파일을 복사합니다. (호스트와 원격 시스템 간에 파일을 복사하지 않습니다. 여기에 대해서는 getd 및 putd를 참조하세요.)

del-device(deld): 파일 삭제

원격 디바이스에서 파일을 삭제할 수 있습니다.

deld file.bat

mkdir-device(mdd, mkdird):create new directory

원격 디바이스에 디렉터리를 만들 수 있습니다.

mkdird c:\newfolder

move-device(mvd, moved): 파일 이동

원격 디바이스의 한 위치에서 다른 위치로 폴더를 이동할 수 있습니다.

moved c:\source\file.txt c:\destination\file.txt

put-device(putd): 파일 복사 대상 위치

원격 디바이스에 파일을 복사하려면 put-device(putd)를 사용합니다.

파일을 디바이스에 복사할 때 새 디바이스 파일의 경로를 지정하거나 복사해야 하는 디렉터리를 지정할 수 있습니다.

PS C:\> putd C:\hostdir\hostfile.txt C:\devicedir\devicefile.txt
PS C:\> putd C:\hostdir\hostfile.txt C:\devicedir

와일드카드는 원본 호스트 경로에만 지원되며 호스트 및 디바이스 경로는 모두 현재 작업 디렉터리에 상대적입니다.

PS C:\> putd C:\hostdir\* C:\devicedir
PS C:\> putd C:\hostdir\hostfile.txt .

재귀적으로 디렉터리 복사가 지원됩니다.

PS C:\> putd -r C:\hostdir\* C:\devicedir

get-device(getd): 파일 복사 원본 위치

디바이스에서 파일을 복사하려면 get-device(getd) 명령을 사용합니다.

디바이스로 파일을 복사하거나 디바이스에서 파일을 복사할 때 새 디바이스 파일의 경로를 지정하거나 복사해야 하는 디렉터리를 지정할 수 있습니다.

PS C:\> getd C:\devicedir\devicefile.txt C:\hostdir\hostfile.txt
PS C:\> getd C:\devicedir\devicefile.txt C:\hostdir

와일드카드는 원본 호스트 경로에만 지원되며 호스트 및 디바이스 경로는 모두 현재 작업 디렉터리에 상대적입니다.

PS C:\> getd C:\devicedir\devicefile.txt .

재귀적으로 디렉터리 복사가 지원됩니다.

PS C:\> getd -r C:\devicedir\ .

kill-device(killd)

reg-device(regd)

레지스트리 키와 관련된 모든 것에 사용됩니다. regd query "insert setting here"는 디바이스의 레지스트리 키를 쿼리하는 데 사용되며 regd add "insert setting here"는 레지스트리 설정을 추가/변경하는 데 사용됩니다.

tlist-device(tlistd)

실행 중인 각 작업에 대한 명령, 명령줄, 작업 디렉터리, 메모리 사용량 및 DLL을 표시합니다.

type-device(typed)

디바이스에 있는 파일의 내용을 터미널에 인쇄합니다(데스크톱 powershell 별칭 "cat"과 유사).

디바이스 및 TShell 환경에 대한 정보 가져오기

get-variable device*

디바이스 주소, 이름 및 작업 디렉터리를 표시합니다.

PS C:\> Get-Variable device*
  
Name                           Value
----                           -----
DeviceAddress                  10.225.96.216
DeviceName                     10.225.96.216
Dget-variable devices*

get-variable TShell*

디바이스에 설치된 TShell 버전을 표시합니다.

PS C:\> Get-Variable TShell*
  
Name                           Value
----                           -----
TShellInstallPath              C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\TShell\TShell
TShellVersion                  8.1.1801.9001

디버깅용 cmdlet

debug-device(debugd): 디버그 프로세스

이 명령이 작동하려면 최신 버전의 Debugger를 설치해야 합니다.

디버거 클라이언트(windbg가 기본값)를 사용자 모드 프로세스에 연결하려면 debug-device(debugd) 명령을 사용합니다. exe의 경로를 지정하여 연결된 디버거로 새 프로세스를 시작할 수 있습니다(디바이스의 현재 작업 디렉터리에 상대적일 수 있음).

PS C:\> debugd M:\windows\system32\cmd.exe

또는 tlist-device 명령을 사용하여 얻을 수 있는 PID를 지정하여 기존 프로세스에 연결합니다.

PS C:\> tlistd
...
1234 myproc.exe

PS C:\> debugd -pid 1234

둘 다 지정하지 않으면 디버거 클라이언트는 디바이스에 대한 연결로 시작되지만 연결된 프로세스는 없습니다.

PS C:\> debugd

-dbg 스위치와 함께 사용할 디버거 클라이언트의 경로를 지정할 수도 있습니다.

PS C:\> debugd -dbg C:\debuggers\ntsd.exe -pid 1234
최신 앱 프로세스 디버깅

실행 시 최신 앱 프로세스를 디버그하려면 DcomLaunch 서비스에 연결하고 자식 프로세스 디버깅을 사용합니다.

TShell에서:

PS C:\> debugd -servicename dcomlaunch

그런 다음 디버거에서:

.childdbg 1