Подключение с помощью TShell

TShell — это модуль PowerShell, входящий в состав комплекта систем Windows, который можно использовать для подключения, выполнения тестов и отладки тестовых устройств и виртуальных машин.

Чтобы подключиться с помощью TShell, вам потребуется:

  • Компьютер технического специалиста с системным комплектом Windows, подключенным к сети;
  • Устройство ОС фабрики, которое:
    • Доступно по сети с компьютера технического специалиста. Сведения о том, как получить IP-адрес устройства, см. в разделе Поиск IP-адреса устройства.
    • Включает TShell. TShell включен в функцию WCOS_TEST_COMPONENTS , которая является частью манифеста функцииWindowsCoreNonProduction.xml. Эта функция включена в образы разработки по умолчанию.

Топология WDP, показывающая, что вы можете подключиться с удаленного компьютера с помощью tshell

Для подключения

  1. На компьютере технического специалиста подключите WSK ISO и запустите среду сборки WSK (например, E:\SetImagGenEnv.cmd) от имени администратора.

  2. Откройте TShell.

    E:\tshell.cmd
    
  3. Подключение к устройству

    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, move) Перемещение файлов
put-device(putd) Копирование файлов с локального устройства на удаленное устройство
get-device(getd) копирование файлов с удаленного устройства на локальное устройство
tlist-device(tlistd) Отображает сведения для каждой выполняемой задачи
type-device(typed) Выводит содержимое файла на устройстве в терминал.
kill-device(killd)
reg-device(regd) Используется для всех элементов, связанных с разделами реестра

Получение сведений об устройстве и среде TShell

командлет Описание
Устройство с переменной get Отображение адреса устройства, имени и рабочего каталога.
TShell с помощью командлета get-variable Отображение версии TShell, установленной на устройстве

Командлеты для отладки

командлет Описание
debug-device(debugd) Процесс отладки

Командлеты подключения устройств

open-device: подключение tshell к целевому устройству

Чтобы открыть подключение, укажите IP-адрес localhost (по умолчанию 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 на устройстве и передает стандартный код выхода, стандартной ошибки и выхода обратно в конвейер PowerShell с помощью команды 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

Он также предоставляет некоторые распространенные команды cmd.exe с помощью выделенных командлетов, для которых он подавляет запросы (например, /y для "copy") и возвращает выходные данные команды в виде строки (примечание. Эти команды предназначены для удобства при работе из командной строки. При написании скриптов PowerShell следует использовать командлет cmd-device).

exec-device(execd):run executables

Чтобы выполнить команду на устройстве, используйте команду exec-device (execd). Вся командная строка после всех параметров будет выполняться на устройстве как есть. Все аргументы процесса, начинающиеся с "-", должны передаваться в кавычки (одинарные или двойные), чтобы PowerShell не пыталась проанализировать их. TShell будет ожидать завершения процесса и вывести код выхода в консоль.

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

Чтобы передать одиночные аргументы внутри двойных кавычек в процесс на стороне устройства, необходимо поместить все аргументы процесса в одинарные кавычки (то есть литеральную строку в PowerShell) при их передаче в TShell.

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):list directory

Вы можете получить список каталогов на удаленном устройстве:

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):remove directory

Вы можете удалить папку с удаленного устройства:

rmdird c:\foldertoremove

copy-device(cpd, copyd):copy files

Копирование файлов между каталогами в удаленной системе. (Это не копирует файлы между узлом и удаленной системой. См. getd и putd для этого.)

файл del-device(deld):d elete

Вы можете удалить файлы с удаленного устройства:

deld file.bat

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

Вы можете создать каталог на удаленном устройстве:

mkdird c:\newfolder

move-device(mvd, move):move files

Вы можете перемещать папки из одного места на удаленном устройстве в другое:

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

put-device(putd):copy files to

Чтобы скопировать файлы на удаленное устройство, используйте 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*

Отображение адреса устройства, имени и рабочего каталога.

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

TShell с переменной get*

Отображение версии 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):d ebug process

Чтобы эта команда работала, необходимо установить последнюю версию отладчика.

Чтобы подключить клиент отладчика (по умолчанию windbg) к процессу в пользовательском режиме, используйте команду debug-device (debugd). Новый процесс можно запустить с присоединенным отладчиком, указав путь к exe-файлу (может быть относительно текущего рабочего каталога устройства).

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

Или подключитесь к существующему процессу, указав ИДЕНТИФИКАТОР, который можно получить с помощью команды tlist-device.

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