Connettersi con TShell

TShell è un modulo di PowerShell incluso in Windows System Kit che è possibile usare per connettersi, eseguire test ed eseguire il debug di dispositivi e macchine virtuali di test.

Per connettersi con TShell, è necessario:

Topologia WDP che mostra che è possibile connettersi tramite tshell da un pc remoto

Per connettersi

  1. Nel PC tecnico montare l'ISO WSK e avviare WSK Build Environment (ad esempio, E:\SetImagGenEnv.cmd) come amministratore.

  2. Aprire TShell:

    E:\tshell.cmd
    
  3. Connettersi al dispositivo

    open-device 192.168.1.2
    

    Dove 192.168.1.2 è l'indirizzo IP del dispositivo a cui ci si connette.

Cmdlet di TShell

I comandi in questa sezione vengono usati per interagire con il dispositivo remoto. Funzioneranno solo quando si è connessi a TShell.

Eseguire ogni comando con -? per ottenere l'utilizzo di base ed eseguire help <command> -detailed per ottenere l'utilizzo dettagliato.

Tutti i *-Device cmdlet sono preceduti dal verbo (la parola prima di '-' e la lettera 'd'. Esempi:

Nome cmdlet Cmdlet Alias
Put-Device putd
Exec-Device execd
Dir-Device dird

Cmdlet disponibili

Cmdlet di connessione del dispositivo

Cmdlet Descrizione
open-device Connette tshell al dispositivo di destinazione
close-device Disconnettersi dal dispositivo di destinazione connesso

Cmdlet di esecuzione del dispositivo

Cmdlet Descrizione
cmd-device(cmdd) Eseguire comandi cmd.exe
exec-device(execd) Eseguire eseguibili

Cmdlet di interazione del dispositivo

Cmdlet Descrizione
deploy-device(deployd) Distribuire pacchetti di test nel dispositivo connesso
dir-device(dird) Elenco directory
cd-device(cdd) Modificare la directory del dispositivo
rmdir-device(rdd, rmdird) Rimuove la directory
copy-device(cpd, copiato) Copiare i file
del-device(deld) Elimina file
mkdir-device(mdd, mkdird) Creare una nuova directory
move-device(mvd, spostato) Spostare file
put-device(putd) Copiare file da un dispositivo locale a un dispositivo remoto
get-device(getd) copiare file da un dispositivo remoto a un dispositivo locale
tlist-device(tlistd) Mostra informazioni per ogni attività in esecuzione
type-device(tipizzato) Stampa il contenuto di un file nel dispositivo nel terminale
kill-device(killd)
reg-device(regd) Usato per qualsiasi elemento correlato alle chiavi del Registro di sistema

Ottenere informazioni sul dispositivo e sull'ambiente TShell

Cmdlet Descrizione
dispositivo get-variable Visualizzare l'indirizzo del dispositivo, il nome e la directory di lavoro.
TShell get-variable Visualizzare la versione di TShell installata nel dispositivo

Cmdlet per il debug

Cmdlet Descrizione
debug-device(debugd) Processo di debug

Cmdlet di connessione del dispositivo

open-device: connessione di tshell al dispositivo di destinazione

Per aprire una connessione, specificare l'indirizzo IP localhost (impostazione predefinita: 127.0.0.1) o se kdnet è abilitato, usare l'indirizzo MAC.

PS> open-device 127.0.0.1

close-device: disconnettersi dal dispositivo di destinazione connesso

Al termine dell'utilizzo di un dispositivo, chiudere la connessione:

PS> close-device

Cmdlet di esecuzione del dispositivo

cmd-device(cmdd): eseguire comandi cmd.exe

TShell espone i comandi in esecuzione tramite cmd.exe nel dispositivo e invia tramite pipe il codice standard out, l'errore standard e il codice di uscita alla pipeline di PowerShell tramite il 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

Espone anche alcuni comandi comuni cmd.exe tramite cmdlet dedicati, per i quali elimina le richieste (ad esempio: /y per "copia") e restituisce l'output del comando come stringa (nota: questi comandi sono progettati per praticità quando si lavora dal prompt. Quando si scrivono script di PowerShell, è consigliabile usare invece il cmdlet cmd-device.

exec-device(execd):run executables

Per eseguire un comando nel dispositivo, usare il comando exec-device (execd). L'intera riga di comando dopo che tutte le opzioni verranno eseguite come nel dispositivo. Tutti gli argomenti del processo che iniziano con '-' devono essere passati in virgolette (singolo o doppio) in modo che PowerShell non tenti di analizzarli. TShell attenderà l'uscita del processo e l'output del codice di uscita nella console.

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

Per passare singoli argomenti all'interno di virgolette doppie al processo lato dispositivo, è necessario inserire tutti gli argomenti di processo all'interno di virgolette singole (ovvero una stringa letterale in PowerShell) quando li passano a TShell.

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

Per impostazione predefinita, l'output del processo non verrà inviato alla shell. È possibile usare l'opzione -output per inviare l'errore standard e standard all'host, entrambi verranno restituiti come proprietà del valore restituito dal comando.

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

Per impostazione predefinita, il comando verrà eseguito in modo sincrono, il che significa che TShell attende l'uscita dal processo prima di tornare al prompt. È possibile usare l'opzione -async per eseguire il processo in modo asincrono, in questo caso TShell avvia il processo e restituisce immediatamente.

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

Cmdlet di interazione dei dispositivi

deploy-device(deployd): distribuire pacchetti di test nel dispositivo connesso

Per distribuire un pacchetto nel dispositivo, usare il comando deploy-device (distribuito).

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

Esempio:

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

Per altre informazioni, eseguire get-help Deploy-Device -detailed.

Per distribuire pacchetti di test WOW, aggiungere l'opzione -testarch. Esempio:

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

Gli input TestArch supportati sono: amd64, x86, arm, arm64, wow64, arm64.arm, arm64.arm, arm64.x86. Solo i pacchetti nativi verranno distribuiti se non viene specificato testArch.

dir-device(dird):list directory

È possibile elencare le directory in un dispositivo remoto:

dird

cd-device(cdd): modificare la directory del dispositivo

TShell verificherà se la nuova directory esiste nel dispositivo e l'errore se non lo fa. La notazione dot-dot è supportata per lo spostamento nella directory padre e la $DeviceWD variabile viene aggiornata ogni volta.

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

È possibile rimuovere una cartella da un dispositivo remoto:

rmdird c:\foldertoremove

copy-device(cpd, copyd):copy files

Copiare file tra directory nel sistema remoto. Questo non copia i file tra l'host e il sistema remoto. Vedere getd and putd for that.)

file del-device(deld):d elete

È possibile eliminare i file da un dispositivo remoto:

deld file.bat

mkdir-device(mdd, mkdird):create new directory

È possibile creare una directory in un dispositivo remoto:

mkdird c:\newfolder

move-device(mvd, spostato): spostare i file

È possibile spostare cartelle da un'altra posizione in un dispositivo remoto a un altro:

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

put-device(putd): copiare i file in

Per copiare i file nel dispositivo remoto, usare il put-device (putd).

Quando si copia un file nel dispositivo, è possibile specificare il percorso del nuovo file del dispositivo o la directory in cui deve essere copiata.

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

I caratteri jolly sono supportati solo per il percorso host di origine e i percorsi host e del dispositivo sono relativi alle directory di lavoro correnti.

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

È supportata la copia ricorsiva delle directory.

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

get-device(getd): copiare i file da

Per copiare i file dal dispositivo, usare i comandi get-device (getd).

Quando si copia un file in o dal dispositivo, è possibile specificare il percorso del nuovo file del dispositivo o la directory in cui deve essere copiata.

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

I caratteri jolly sono supportati solo per il percorso host di origine e i percorsi host e del dispositivo sono relativi alle directory di lavoro correnti.

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

È supportata la copia ricorsiva delle directory.

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

kill-device(ucciso)

reg-device(regd)

Usato per qualsiasi elemento correlato alle chiavi del Registro di sistema. regd query "insert setting here" viene usato per eseguire query sulle chiavi del Registro di sistema nel dispositivo e regd add "insert setting here" viene usato per aggiungere/modificare le impostazioni del Registro di sistema.

tlist-device(tlistd)

Visualizzare il comando, la riga di comando, la directory di lavoro, l'utilizzo della memoria e le DLL per ogni attività in esecuzione.

type-device(typed)

Stampa il contenuto di un file nel dispositivo nel terminale (simile all'alias di powershell desktop "cat")

Ottenere informazioni sul dispositivo e sull'ambiente TShell

dispositivo get-variable*

Visualizzare l'indirizzo del dispositivo, il nome e la directory di lavoro.

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

get-variable TShell*

Visualizzare la versione di TShell installata nel dispositivo.

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

Cmdlet per il debug

processo debug-device(debugd):d ebug

Per il funzionamento di questo comando, è necessario installare la versione più recente del debugger.

Per collegare un client del debugger (windbg è il valore predefinito) a un processo in modalità utente, usare il comando debug-device (debugd). Un nuovo processo può essere avviato con il debugger collegato specificando il percorso dell'exe (può essere relativo alla directory di lavoro corrente del dispositivo).

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

Oppure collegarsi a un processo esistente specificando il PID, che può essere ottenuto usando il comando tlist-device.

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

PS C:\> debugd -pid 1234

Se non viene specificato alcun elemento, il client del debugger viene avviato con una connessione al dispositivo, ma non viene collegato alcun processo.

PS C:\> debugd

È anche possibile specificare il percorso del client del debugger da usare con l'opzione -dbg

PS C:\> debugd -dbg C:\debuggers\ntsd.exe -pid 1234
Debug di un processo di app moderna

Per eseguire il debug di un processo di app moderno all'avvio, collegarsi al servizio DcomLaunch e abilitare il debug del processo figlio:

In TShell:

PS C:\> debugd -servicename dcomlaunch

Quindi nel debugger:

.childdbg 1