Подключение с помощью TShell
TShell — это модуль PowerShell, входящий в состав комплекта систем Windows, который можно использовать для подключения, выполнения тестов и отладки тестовых устройств и виртуальных машин.
Чтобы подключиться с помощью TShell, вам потребуется:
- Компьютер технического специалиста с системным комплектом Windows, подключенным к сети;
- Устройство ОС фабрики, которое:
- Доступно по сети с компьютера технического специалиста. Сведения о том, как получить IP-адрес устройства, см. в разделе Поиск IP-адреса устройства.
- Включает TShell. TShell включен в функцию
WCOS_TEST_COMPONENTS
, которая является частью манифеста функцииWindowsCoreNonProduction.xml. Эта функция включена в образы разработки по умолчанию.
Для подключения
На компьютере технического специалиста подключите WSK ISO и запустите среду сборки WSK (например,
E:\SetImagGenEnv.cmd
) от имени администратора.Откройте TShell.
E:\tshell.cmd
Подключение к устройству
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