TShell を使用して接続する
TShell は Windows システム キットに含まれる PowerShell モジュールで、テスト デバイスや VM への接続、テストの実行、デバッグに使用することができます。
TShell を使用して接続するには、以下のものが必要です。
- ネットワークに接続している、Windows システム キットが搭載されているテクニシャン PC
- 以下に該当するファクトリ OS デバイス:
- テクニシャン PC からネットワーク経由で利用可能 デバイスの IP アドレスを取得する方法については、デバイスの IP アドレスを検索する方法に関するセクションを参照してください。
- TShell が含まれている。 TShell は、WindowsCoreNonProduction.xml フィーチャー マニフェストの一部である
WCOS_TEST_COMPONENTS
機能に含まれています。 この機能は、既定で開発イメージに含まれています。
接続する
テクニシャン PC で、WSK ISO をマウントし、WSK ビルド環境 (例:
E:\SetImagGenEnv.cmd
) を管理者として起動します。次のように TShell を開きます。
E:\tshell.cmd
デバイスに接続する
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