Conexión mediante TShell
TShell es un módulo de PowerShell incluido con el Kit de sistema de Windows que puede usar para conectarse, ejecutar pruebas y depurar los dispositivos de prueba y las máquinas virtuales.
Para conectarse mediante TShell, necesitará lo siguiente:
- Un equipo técnico con el Kit de sistema de Windows que está conectado a una red
- Un dispositivo de sistema operativo de fábrica que:
- Está disponible a través de la red desde el equipo técnico. Consulte Búsqueda de la dirección IP del dispositivo para obtener información sobre cómo obtener la dirección IP del dispositivo.
- Incluye TShell. TShell se incluye en la
WCOS_TEST_COMPONENTS
característica , que forma parte del manifiesto de característica deWindowsCoreNonProduction.xml. Esta característica se incluye en las imágenes de desarrollo de forma predeterminada.
Para conectarse
En el equipo técnico, monte la ISO de WSK e inicie el entorno de compilación de WSK (por ejemplo,
E:\SetImagGenEnv.cmd
) como administrador.Abra TShell:
E:\tshell.cmd
Conexión al dispositivo
open-device 192.168.1.2
Donde 192.168.1.2 es la dirección IP del dispositivo al que se conecta.
Cmdlets de TShell
Los comandos de esta sección se usan para interactuar con el dispositivo remoto. Solo funcionarán mientras esté conectado a TShell.
Ejecute cada comando con -?
para obtener el uso básico y ejecute help <command> -detailed
para obtener el uso detallado.
Todos los *-Device
cmdlets tienen el alias de su verbo (la palabra anterior a "-") y la letra "d". Ejemplos:
Nombre del cmdlet | Cmdlet Alias |
---|---|
Put-Device | putd |
Exec-Device | execd |
Dir-Device | dird |
Cmdlets disponibles
Cmdlets de conexión de dispositivos
cmdlet | Descripción |
---|---|
open-device | Conecta tshell al dispositivo de destino |
close-device | Desconexión del dispositivo de destino conectado |
Cmdlets de ejecución de dispositivos
cmdlet | Descripción |
---|---|
cmd-device(cmdd) | Ejecutar comandos de cmd.exe |
exec-device(execd) | Ejecución de ejecutables |
Cmdlets de interacción de dispositivos
cmdlet | Descripción |
---|---|
deploy-device(deployd) | Implementación de paquetes de prueba en el dispositivo conectado |
dir-device(dird) | Directorio de lista |
cd-device(cdd) | Cambio del directorio del dispositivo |
rmdir-device(rdd, rmdird) | Quitar directorio |
copy-device(cpd, copyd) | Copiar archivos |
del-device(deld) | Eliminar archivo |
mkdir-device(mdd, mkdird) | Creación de un directorio |
move-device(mvd, movido) | Traslado de archivos |
put-device(putd) | Copia de archivos de un dispositivo local a un dispositivo remoto |
get-device(getd) | copiar archivos desde un dispositivo remoto a un dispositivo local |
tlist-device(tlistd) | Muestra información para cada tarea en ejecución |
type-device(typed) | Imprime el contenido de un archivo en el dispositivo en el terminal. |
kill-device(killd) | |
reg-device(regd) | Se usa para cualquier cosa relacionada con las claves del Registro. |
Obtener información sobre el dispositivo y el entorno de TShell
cmdlet | Descripción |
---|---|
dispositivo get-variable | Muestra la dirección del dispositivo, el nombre y el directorio de trabajo. |
Get-variable TShell | Mostrar la versión de TShell instalada en el dispositivo |
Cmdlets para la depuración
cmdlet | Descripción |
---|---|
debug-device(debugd) | Proceso de depuración |
Cmdlets de conexión de dispositivos
open-device: conexión de tshell al dispositivo de destino
Para abrir una conexión, especifique la dirección IP de localhost (valor predeterminado: 127.0.0.1) o si kdnet está habilitado, use la dirección MAC.
PS> open-device 127.0.0.1
close-device: desconexión del dispositivo de destino conectado
Cuando haya terminado de trabajar en un dispositivo, cierre la conexión:
PS> close-device
Cmdlets de ejecución de dispositivos
cmd-device(cmdd): ejecutar comandos de cmd.exe
TShell expone comandos en ejecución a través de cmd.exe en el dispositivo y canaliza el código estándar, el error estándar y el código de salida a la canalización de PowerShell a través del comando 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
También expone algunos comandos comunes de cmd.exe a través de cmdlets dedicados, para los que suprime los mensajes (por ejemplo: /y
para "copy") y devuelve la salida del comando como una cadena (nota: estos comandos están diseñados para mayor comodidad al trabajar desde el símbolo del sistema). Al escribir scripts de PowerShell, se debe usar el cmdlet cmd-device en su lugar).
exec-device(execd):run ejecutables
Para ejecutar un comando en el dispositivo, use el comando exec-device (execd). Toda la línea de comandos después de que se ejecuten los modificadores tal y como están en el dispositivo. Los argumentos del proceso que empiecen por "-" deben pasarse entre comillas (single o double) para que PowerShell no intente analizarlos. TShell esperará a que el proceso salga y se generará el código de salida en la consola.
PS C:\> execd windows\system32\cmd.exe
PS C:\> execd tux.exe '-d tuxdemo.dll'
Para pasar argumentos simples entre comillas dobles al proceso del lado del dispositivo, debe colocar todos los argumentos de proceso entre comillas simples (que es una cadena literal en PowerShell) al pasarlos a TShell.
PS C:\> execd tux.exe '-d tuxdemo.dll -c "arg1 arg2" -f results.log'
De forma predeterminada, la salida del proceso no se enviará al shell. Puede usar el modificador -output para canalizar tanto el error estándar como el estándar al host, ambos se devolverán como propiedades del valor devuelto del comando.
PS C:\> execd -output tux.exe '-d tuxdemo.dll'
De forma predeterminada, el comando se ejecutará sincrónicamente, lo que significa que TShell espera a que el proceso salga antes de volver al símbolo del sistema. Puede usar el modificador -async para ejecutar el proceso de forma asincrónica, en cuyo caso TShell simplemente inicia el proceso y devuelve inmediatamente.
PS C:\> execd -async tux '-d tuxdemo.dll -f results.log'
Cmdlets de interacción de dispositivos
deploy-device(deployd): implementación de paquetes de prueba en el dispositivo conectado
Para implementar un paquete en el dispositivo, use el comando deploy-device (implementado).
Sintaxis de Deploy-Device
Deploy-Device -Packages <string[]> [-PackageRootPaths <string>] [-AlternatePackageRoots <string[]>]
[-TestToolsPath <string>] [-DeployPackageMacroOverride <string>] [-PackageCache <string>] [-Timeout <int>]
[-OnDevice] [-TestArchitecture <string>] [<CommonParameters>]
Ejemplo:
PS C:\> Deploy-Device -Packages Microsoft.OneCore.ATest.spkg
-packageRootPath \\server\folder
-alternatePackageRoots c:\packages\sd.binaries.x86fre\prebuilt
Para más información, ejecute get-help Deploy-Device -detailed
.
Para implementar paquetes de prueba wow, agregue la opción -testarch. Ejemplo:
PS c:> Deploy-Device -Packages Microsoft-Windows-Test-TAEF -testarch wow64
Las entradas de TestArch admitidas son: amd64, x86, arm, arm64, wow64, arm64.arm, arm64.x86. Solo se implementarán paquetes nativos si no se especifica ningún testArch.
Directorio dir-device(dird):list
Puede enumerar los directorios en un dispositivo remoto:
dird
cd-device(cdd): cambio del directorio del dispositivo
TShell comprobará si el nuevo directorio existe en el dispositivo y si no lo hace. La notación dot-dot se admite para pasar al directorio primario y la $DeviceWD
variable se actualiza cada vez.
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
Puede quitar una carpeta de un dispositivo remoto:
rmdird c:\foldertoremove
copy-device(cpd, copyd):copy files
Copiar archivos entre directorios en el sistema remoto. (Esto no copia los archivos entre el host y el sistema remoto. Vea getd and putd for that.)
del-device(deld):d elete file
Puede eliminar archivos de un dispositivo remoto:
deld file.bat
mkdir-device(mdd, mkdird):create new directory
Puede crear un directorio en un dispositivo remoto:
mkdird c:\newfolder
move-device(mvd, moved):move files
Puede mover carpetas de un lugar en un dispositivo remoto a otro:
moved c:\source\file.txt c:\destination\file.txt
put-device(putd):copy files to
Para copiar archivos en el dispositivo remoto, use el put-device (putd).
Al copiar un archivo en el dispositivo, puede especificar la ruta de acceso del nuevo archivo de dispositivo o el directorio en el que se debe copiar.
PS C:\> putd C:\hostdir\hostfile.txt C:\devicedir\devicefile.txt
PS C:\> putd C:\hostdir\hostfile.txt C:\devicedir
Los caracteres comodín solo se admiten para la ruta de acceso del host de origen, y las rutas de acceso del host y del dispositivo son relativas a los directorios de trabajo actuales.
PS C:\> putd C:\hostdir\* C:\devicedir
PS C:\> putd C:\hostdir\hostfile.txt .
Se admite la copia recursiva de directorios.
PS C:\> putd -r C:\hostdir\* C:\devicedir
get-device(getd): copiar archivos desde
Para copiar archivos desde el dispositivo, use los comandos get-device (getd).
Al copiar un archivo en o desde el dispositivo, puede especificar la ruta de acceso del nuevo archivo de dispositivo o el directorio en el que se debe copiar.
PS C:\> getd C:\devicedir\devicefile.txt C:\hostdir\hostfile.txt
PS C:\> getd C:\devicedir\devicefile.txt C:\hostdir
Los caracteres comodín solo se admiten para la ruta de acceso del host de origen, y las rutas de acceso del host y del dispositivo son relativas a los directorios de trabajo actuales.
PS C:\> getd C:\devicedir\devicefile.txt .
Se admite la copia recursiva de directorios.
PS C:\> getd -r C:\devicedir\ .
kill-device(killd)
reg-device(regd)
Se usa para cualquier cosa relacionada con las claves del Registro.
regd query "insert setting here"
se usa para consultar las claves del Registro en el dispositivo y regd add "insert setting here"
se usa para agregar o cambiar la configuración del Registro.
tlist-device(tlistd)
Muestra el comando, la línea de comandos, el directorio de trabajo, el uso de memoria y los archivos DLL para cada tarea en ejecución.
type-device(typed)
Imprime el contenido de un archivo en el dispositivo en el terminal (similar al alias de PowerShell de escritorio "cat")
Obtener información sobre el dispositivo y el entorno de TShell
dispositivo get-variable*
Muestra la dirección del dispositivo, el nombre y el directorio de trabajo.
PS C:\> Get-Variable device*
Name Value
---- -----
DeviceAddress 10.225.96.216
DeviceName 10.225.96.216
Dget-variable devices*
get-variable TShell*
Muestra la versión de TShell instalada en el dispositivo.
PS C:\> Get-Variable TShell*
Name Value
---- -----
TShellInstallPath C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\TShell\TShell
TShellVersion 8.1.1801.9001
Cmdlets para la depuración
debug-device(debugd):d ebug process
Para que este comando funcione, debe instalar la versión más reciente del depurador.
Para adjuntar un cliente de depurador (windbg es el valor predeterminado) a un proceso de modo de usuario, use el comando debug-device (depurado). Se puede iniciar un nuevo proceso con el depurador asociado especificando la ruta de acceso del exe (puede ser relativa al directorio de trabajo actual del dispositivo).
PS C:\> debugd M:\windows\system32\cmd.exe
O bien, adjunte a un proceso existente especificando el PID, que se puede obtener mediante el comando tlist-device.
PS C:\> tlistd
...
1234 myproc.exe
PS C:\> debugd -pid 1234
Si no se especifica ninguno, el cliente del depurador se inicia con una conexión al dispositivo, pero no se adjunta ningún proceso.
PS C:\> debugd
También puede especificar la ruta de acceso del cliente del depurador que se usará con el modificador -dbg.
PS C:\> debugd -dbg C:\debuggers\ntsd.exe -pid 1234
Depuración de un proceso de aplicación moderna
Para depurar un proceso de aplicación moderno al iniciarse, adjunte al servicio DcomLaunch y habilite la depuración de procesos secundarios:
En TShell:
PS C:\> debugd -servicename dcomlaunch
A continuación, en el depurador:
.childdbg 1