TShell を使用して接続する

TShell は Windows システム キットに含まれる PowerShell モジュールで、テスト デバイスや VM への接続、テストの実行、デバッグに使用することができます。

TShell を使用して接続するには、以下のものが必要です。

  • ネットワークに接続している、Windows システム キットが搭載されているテクニシャン PC
  • 以下に該当するファクトリ OS デバイス:

WDP topology showing you can connect via tshell from a remote pc

接続する

  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 コマンドレット

このセクションのコマンドを使用して、リモート デバイスを操作します。 これらは、TShell に接続している間のみ機能します。

各コマンドの基本的な使用方法については -? を、詳細な使用方法については help <command> -detailed を実行します。

すべての *-Device コマンドレットは、動詞 ('-' の前の単語) と文字 'd' のエイリアスになっています。 例 :

コマンドレット名 コマンドレットのエイリアス
Put-Device putd
Exec-Device execd
Dir-Device dird

利用可能なコマンドレット

デバイス接続コマンドレット

コマンドレット 説明
open-device tshell をターゲット デバイスに接続する
close-device 接続されているターゲット デバイスから切断する

デバイス実行コマンドレット

コマンドレット 説明
cmd-device(cmdd) cmd.exe コマンドを実行する
exec-device(execd) 実行可能ファイルを実行する

デバイス操作コマンドレット

コマンドレット 説明
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 環境に関する情報の取得

コマンドレット 説明
get-variable device デバイスのアドレス、名前、作業ディレクトリを表示します。
get-variable TShell デバイスにインストールされている TShell バージョンを表示します。

デバッグ用のコマンドレット

コマンドレット 説明
debug-device(debugd) デバッグ プロセス

デバイス接続コマンドレット

open-device: ターゲット デバイスに tshell を接続する

接続を開く場合は、localhost IP (既定値: 127.0.0.1) を指定するか、kdnet が有効になっている場合は MAC アドレスを使用します。

PS> open-device 127.0.0.1

close-device: 接続されているターゲット デバイスから切断する

デバイスの操作が完了したら、接続を閉じます。

PS> close-device

デバイス実行コマンドレット

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

また、専用のコマンドレットを介していくつかの一般的な cmd.exe コマンドが公開され、プロンプトが表示されなくなります (例: /y ('copy' の場合)) を返し、出力を返します。コマンドを文字列として返します (注: これらのコマンドは、プロンプトから作業する際の利便性を目的としています。PowerShell スクリプトを作成する場合は、代わりに cmd-device コマンドレットを使用する必要があります)。

exec-device(execd): 実行可能ファイルを実行する

デバイスでコマンドを実行するには、exec-device (execd) コマンドを使用します。 スイッチ後のコマンド ライン全体が、デバイス上でそのまま実行されます。 '-' で始まるプロセスに対する引数は、PowerShell でパースしないよう、引用符 (一重または二重) で囲んで渡す必要があります。 TShell はプロセスの終了まで待機してから、終了コードをコンソールに出力します。

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

二重引用符で囲まれた 1 つの引数をデバイス側のプロセスに渡すには、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'

デバイス操作コマンドレット

deploy-device(deployd): 接続されているデバイスにテスト パッケージを展開する

デバイスにパッケージを展開するには、deploy-device (deployd) コマンドを使用します。

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): ディレクトリを一覧表示する

リモート デバイス上のディレクトリを一覧表示できます。

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):ディレクトリを削除する

リモート デバイスからフォルダーを削除することができます。

rmdird c:\foldertoremove

copy-device(cpd, copyd):ファイルをコピーする

リモート システム上のディレクトリ間でファイルをコピーします。 (これにより、ホストとリモート・システム間でのファイルのコピーは行われません。これについては getd と putd を参照してください。

del-device(deld):ファイルを削除する

リモート デバイスからファイルを削除することができます。

deld file.bat

mkdir-device(mdd, mkdird):新しいディレクトリを作成する

リモート デバイスにディレクトリを作成できます。

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

デバッグ用のコマンドレット

debug-device(debugd):プロセスをデバッグする

このコマンドが動作するためには、最新バージョンのデバッガーをインストールする必要があります。

デバッガー クライアント (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