Se connecter à l’aide de TShell

TShell est un module PowerShell inclus dans le Kit système Windows que vous pouvez utiliser pour vous connecter, exécuter des tests et déboguer vos machines virtuelles et appareils de test.

Pour vous connecter à l’aide de TShell, vous avez besoin des éléments suivants :

Topologie WDP montrant que vous pouvez vous connecter via tshell à partir d’un PC distant

Pour vous connecter

  1. Sur le PC de technicien, montez l’ISO WSK et démarrez l’environnement de build WSK (par exemple, E:\SetImagGenEnv.cmd) en tant qu’administrateur.

  2. Ouvrez TShell :

    E:\tshell.cmd
    
  3. Se connecter à l’appareil

    open-device 192.168.1.2
    

    Où 192.168.1.2 est l’adresse IP de l’appareil auquel vous vous connectez.

Applets de commande TShell

Les commandes de cette section sont utilisées pour interagir avec l’appareil distant. Ils fonctionnent uniquement lorsque vous êtes connecté à TShell.

Exécutez chaque commande avec -? pour obtenir l’utilisation de base, puis exécutez help <command> -detailed pour obtenir l’utilisation détaillée.

Toutes les *-Device applets de commande ont un alias pour leur verbe (le mot avant « - ») et la lettre « d ». Exemples :

Nom de l'applet de commande Alias d’applet de commande
Put-Device putd
Exec-Device execd
Dir-Device dird

Applets de commande disponibles

Applets de commande de connexion d’appareil

Applet de commande Description
open-device Connecte tshell à l’appareil cible
close-device Se déconnecter de l’appareil cible connecté

Applets de commande d’exécution d’appareil

Applet de commande Description
cmd-device(cmdd) Exécuter des commandes cmd.exe
exec-device(execd) Exécuter des exécutables

Applets de commande d’interaction d’appareil

Applet de commande Description
deploy-device(deployd) Déployer des packages de test sur l’appareil connecté
dir-device(dird) Répertoire de liste
cd-device(cdd) Modifier le répertoire de l’appareil
rmdir-device(rdd, rmdird) Supprimer un répertoire
copy-device(cpd, copyd) Copie des fichiers
del-device(deld) Supprimer le fichier
mkdir-device(mdd, mkdird) Créer un répertoire
move-device(mvd, move) Déplacer des fichiers
put-device(putd) Copier des fichiers d’un appareil local vers un appareil distant
get-device(getd) copier des fichiers d’un appareil distant vers un appareil local
tlist-device(tlistd) Affiche des informations pour chaque tâche en cours d’exécution
type-device(typd) Imprime le contenu d’un fichier sur l’appareil sur le terminal
kill-device(killd)
reg-device(regd) Utilisé pour tout ce qui est lié aux clés de Registre

Obtenir des informations sur l’appareil et l’environnement TShell

Applet de commande Description
get-variable device Afficher l’adresse de l’appareil, le nom et le répertoire de travail.
get-variable TShell Afficher la version de TShell installée sur l’appareil

Applets de commande pour le débogage

Applet de commande Description
debug-device(debugd) Processus de débogage

Applets de commande de connexion d’appareil

open-device : connexion de tshell à l’appareil cible

Pour ouvrir une connexion, spécifiez l’adresse IP localhost (par défaut : 127.0.0.1) ou si kdnet est activé, utilisez l’adresse MAC.

PS> open-device 127.0.0.1

close-device : se déconnecter de l’appareil cible connecté

Lorsque vous avez terminé de travailler sur un appareil, fermez la connexion :

PS> close-device

Applets de commande d’exécution d’appareil

cmd-device(cmdd) : exécuter des commandes cmd.exe

TShell expose les commandes en cours d’exécution via cmd.exe sur l’appareil et renvoie le code standard, l’erreur standard et le code de sortie vers le pipeline PowerShell via la commande cmd-device (cmdd).

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

Il expose également certaines commandes de cmd.exe courantes via des applets de commande dédiées, pour lesquelles il supprime les invites (par exemple, /y pour « copy ») et retourne la sortie de la commande sous forme de chaîne (Remarque : ces commandes sont destinées à des raisons pratiques lorsque vous travaillez à partir de l’invite. Lors de l’écriture de scripts PowerShell, l’applet de commande cmd-device doit être utilisée à la place).

exec-device(execd):exécuter des exécutables

Pour exécuter une commande sur l’appareil, utilisez la commande exec-device (execd). Toute la ligne de commande après l’exécution des commutateurs en l’état sur l’appareil. Tous les arguments du processus qui commencent par « - » doivent être passés entre guillemets (simples ou doubles) afin que PowerShell n’essaie pas de les analyser. TShell attend que le processus se termine et génère le code de sortie dans la console.

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

Pour passer des arguments uniques entre guillemets doubles au processus côté appareil, vous devez placer tous les arguments de processus entre guillemets uniques (qui est une chaîne littérale dans PowerShell) lors de leur passage à TShell.

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

Par défaut, la sortie du processus n’est pas envoyée à l’interpréteur de commandes. Vous pouvez utiliser le commutateur -output pour diriger à la fois l’erreur standard et l’erreur standard vers l’hôte. Les deux sont retournés en tant que propriétés de la valeur de retour de la commande.

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

Par défaut, la commande est exécutée de manière synchrone, ce qui signifie que TShell attend que le processus se termine avant de revenir à l’invite. Vous pouvez utiliser le commutateur -async pour exécuter le processus de manière asynchrone, auquel cas TShell démarre simplement le processus et retourne immédiatement.

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

Applets de commande d’interaction d’appareil

deploy-device(deployd) : déployer des packages de test sur l’appareil connecté

Pour déployer un package sur l’appareil, utilisez la commande deploy-device (deployd).

syntaxe Deploy-Device
 Deploy-Device -Packages <string[]> [-PackageRootPaths <string>] [-AlternatePackageRoots <string[]>]
    [-TestToolsPath <string>] [-DeployPackageMacroOverride <string>] [-PackageCache <string>] [-Timeout <int>]
    [-OnDevice] [-TestArchitecture <string>] [<CommonParameters>]

Exemple :

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

Pour en savoir plus, exécutez get-help Deploy-Device -detailed.

Pour déployer des packages de test WOW, ajoutez l’option -testarch. Exemple :

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

Les entrées TestArch prises en charge sont les suivantes : amd64, x86, arm, arm64, wow64, arm64.arm, arm64.x86. Seuls les packages natifs seront déployés si aucun testArch n’est spécifié.

dir-device(dird):list directory

Vous pouvez répertorier les répertoires sur un appareil distant :

dird

cd-device(cdd) : modifier le répertoire de l’appareil

TShell case activée si le nouveau répertoire existe sur l’appareil et l’erreur s’il ne le fait pas. La notation point-point est prise en charge pour le déplacement vers le répertoire parent, et la $DeviceWD variable est mise à jour à chaque fois.

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

Vous pouvez supprimer un dossier d’un appareil distant :

rmdird c:\foldertoremove

copy-device(cpd, copyd):copy files

Copiez des fichiers entre des répertoires sur le système distant. (Cela ne copie pas les fichiers entre l’hôte et le système distant. Voir getd et putd pour cela.)

fichier del-device(deld):d elete

Vous pouvez supprimer des fichiers d’un appareil distant :

deld file.bat

mkdir-device(mdd, mkdird): créer un répertoire

Vous pouvez créer un répertoire sur un appareil distant :

mkdird c:\newfolder

move-device(mvd, move):déplacer des fichiers

Vous pouvez déplacer des dossiers d’un emplacement sur un appareil distant vers un autre :

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

put-device(putd):copier les fichiers vers

Pour copier des fichiers sur l’appareil distant, utilisez le put-device (putd).

Lors de la copie d’un fichier sur l’appareil, vous pouvez spécifier le chemin d’accès du nouveau fichier d’appareil ou le répertoire dans lequel il doit être copié.

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

Les caractères génériques sont pris en charge uniquement pour le chemin d’accès de l’hôte source, et les chemins d’accès de l’hôte et de l’appareil sont relatifs aux répertoires de travail actuels.

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

La copie récursive des répertoires est prise en charge.

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

get-device(getd) : copiez les fichiers à partir de

Pour copier des fichiers à partir de l’appareil, utilisez les commandes get-device (getd).

Lors de la copie d’un fichier vers ou à partir de l’appareil, vous pouvez spécifier le chemin d’accès du nouveau fichier d’appareil ou le répertoire dans lequel il doit être copié.

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

Les caractères génériques sont pris en charge uniquement pour le chemin d’accès de l’hôte source, et les chemins d’accès de l’hôte et de l’appareil sont relatifs aux répertoires de travail actuels.

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

La copie récursive des répertoires est prise en charge.

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

kill-device(killd)

reg-device(regd)

Utilisé pour tout ce qui concerne les clés de Registre. regd query "insert setting here" est utilisé pour interroger les clés de Registre sur l’appareil et regd add "insert setting here" est utilisé pour ajouter/modifier les paramètres du Registre.

tlist-device(tlistd)

Affichez la commande, la ligne de commande, le répertoire de travail, l’utilisation de la mémoire et les DLL pour chaque tâche en cours d’exécution.

type-device(typd)

Imprime le contenu d’un fichier sur l’appareil sur le terminal (semblable à l’alias powershell de bureau « cat »)

Obtenir des informations sur l’appareil et l’environnement TShell

get-variable device*

Afficher l’adresse de l’appareil, le nom et le répertoire de travail.

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

get-variable TShell*

Affichez la version de TShell installée sur l’appareil.

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

Applets de commande pour le débogage

debug-device(debugd):d ébug process

Pour que cette commande fonctionne, vous devez installer la dernière version du débogueur.

Pour attacher un client de débogueur (windbg est la valeur par défaut) à un processus en mode utilisateur, utilisez la commande debug-device (déboguer). Un nouveau processus peut être démarré avec le débogueur attaché en spécifiant le chemin d’accès de l’exe (peut être relatif au répertoire de travail actuel de l’appareil).

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

Vous pouvez également l’attacher à un processus existant en spécifiant le PID, qui peut être obtenu à l’aide de la commande tlist-device.

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

PS C:\> debugd -pid 1234

Si ni l’un ni l’autre n’est spécifié, le client de débogueur est démarré avec une connexion à l’appareil, mais aucun processus n’est attaché.

PS C:\> debugd

Vous pouvez également spécifier le chemin du client de débogueur à utiliser avec le commutateur -dbg

PS C:\> debugd -dbg C:\debuggers\ntsd.exe -pid 1234
Débogage d’un processus d’application moderne

Pour déboguer un processus d’application moderne au lancement, joignez-vous au service DcomLaunch et activez le débogage de processus enfant :

Dans TShell :

PS C:\> debugd -servicename dcomlaunch

Ensuite, dans le débogueur :

.childdbg 1