使用 TShell 連線

TShell 是隨附于 Windows 系統套件的 PowerShell 模組,可用來連線、執行測試,以及偵錯測試裝置和 VM。

若要使用 TShell 進行連線,您需要:

  • 具有連線到網路之 Windows 系統套件的技術人員電腦
  • Factory OS 裝置::

顯示您可以從遠端電腦透過 tshell 連線的 WDP 拓撲

若要連線

  1. 在技術人員電腦上,掛接 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 別名
Put-Device putd
Exec-Device execd
Dir-Device dird

可用的 Cmdlet

裝置連線 Cmdlet

Cmdlet 描述
open-device 將 tshell 連線到目標裝置
close-device 中斷與連線目標裝置的連線

裝置執行 Cmdlet

Cmdlet 描述
cmd-device (cmdd) 執行cmd.exe命令
exec-device (execd) 執行可執行檔

裝置互動 Cmdlet

Cmdlet 描述
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,移動) 移動檔案
put-device (putd) 將檔案從本機裝置複製到遠端裝置
get-device (getd) 將檔案從遠端裝置複製到本機裝置
tlist-device (tlistd) 顯示每個執行中工作的資訊
type-device (具類型的) 將裝置上的檔案內容列印到終端機
終止裝置 (終止)
reg-device (regd) 用於與登錄機碼相關的任何專案

取得裝置和 TShell 環境的相關資訊

Cmdlet 描述
get-variable 裝置 顯示裝置位址、名稱和工作目錄。
get-variable TShell 顯示裝置上安裝的 TShell 版本

用於偵錯的 Cmdlet

Cmdlet 描述
偵錯裝置 (偵錯) 偵錯進程

裝置連線 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

它也會透過專用 Cmdlet 公開一些常見的cmd.exe命令,其中會隱藏提示 (範例: /y 針對 'copy') ,並將命令的輸出傳回為字串 (附注:這些命令是為了在從提示工作時方便使用。撰寫 PowerShell 腳本時,應該改為使用 Cmd-device Cmdlet) 。

exec-device (execd) :run 可執行檔

若要在裝置上執行命令,請使用 exec-device (execd) 命令。 在裝置上依原樣執行任何參數之後的整個命令列。 開頭為 '-' 的進程的任何引數都必須以引號傳遞, (單一或雙引號) ,因此 PowerShell 不會嘗試剖析它們。 TShell 會等候進程結束,並將結束代碼輸出至主控台。

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

若要將雙引號內的單一引數傳遞至裝置端進程,您必須將所有進程引數放在單引號內, (這是 PowerShell 中的常值字串) 傳遞至 TShell 時。

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 (部署) :將測試套件部署到連線的裝置

若要將套件部署至裝置,請使用部署裝置 (部署的) 命令。

Deploy-Device語法
 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 目錄

您可以從遠端裝置移除資料夾:

rmdird c:\foldertoremove

copy-device (cpd,複製) :copy 檔案

在遠端系統上的目錄之間複製檔案。 (這不會在主機與遠端系統之間複製檔案。請參閱 getd and putd for that.)

del-device (deld) :delete 檔案

您可以從遠端裝置刪除檔案:

deld file.bat

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

您可以在遠端裝置上建立目錄:

mkdird c:\newfolder

move-device (mvd, move) :move 檔案

您可以將資料夾從遠端裝置上的某個位置移至另一個位置:

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

put-device (putd) :copy files to

若要將檔案複製到遠端裝置,請使用 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)

將裝置上檔案的內容列印到終端機, (類似桌面電源別名 「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 (偵錯的) :debug 進程

若要讓此命令能夠運作,您必須安裝最新版本的 偵錯工具

若要將偵錯工具用戶端 (windbg 附加至使用者模式進程的預設) ,請使用偵錯裝置 (偵錯) 命令。 您可以藉由指定 exe (的路徑,以附加偵錯工具來啟動新的進程,可以相對於裝置目前的工作目錄) 。

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

或藉由指定 PID 來附加至現有的進程,這可以使用 tlist-device 命令取得。

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