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:
- UN PC tecnico con Windows System Kit connesso a una rete
- Un dispositivo del sistema operativo factory che:
- È disponibile in rete dal PC tecnico. Per informazioni su come ottenere l'indirizzo IP del dispositivo, vedere Trovare l'indirizzo IP del dispositivo.
- Include TShell. TShell è incluso nella
WCOS_TEST_COMPONENTS
funzionalità, che fa parte del manifesto della funzionalitàWindowsCoreNonProduction.xml. Questa funzionalità è inclusa nelle immagini di sviluppo per impostazione predefinita.
Per connettersi
Nel PC tecnico montare l'ISO WSK e avviare WSK Build Environment (ad esempio,
E:\SetImagGenEnv.cmd
) come amministratore.Aprire TShell:
E:\tshell.cmd
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