使用 TShell 連線
TShell 是隨附于 Windows 系統套件的 PowerShell 模組,可用來連線、執行測試,以及偵錯測試裝置和 VM。
若要使用 TShell 進行連線,您需要:
- 具有連線到網路之 Windows 系統套件的技術人員電腦
- Factory OS 裝置::
- 可從技術人員電腦透過網路取得。 如需如何取得裝置 IP 位址的資訊,請參閱 尋找裝置的 IP 位址 。
- 包含 TShell。 TShell 包含在功能中
WCOS_TEST_COMPONENTS
,這是 WindowsCoreNonProduction.xml功能資訊清單的一部分。 此功能預設包含在開發映射中。
若要連線
在技術人員電腦上,掛接 WSK ISO 並啟動 WSK 建置環境 (範例,
E:\SetImagGenEnv.cmd
以系統管理員身分) 。開啟 TShell:
E:\tshell.cmd
連線到裝置
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