Как получить доступ к содержимому устройства MTP с помощью powershell?

Я новичок в написании сценариев powershell и любезно смирюсь с моей глупостью, если таковая имеется. Я пытаюсь написать скрипт для резервного копирования выбранных папок с моего телефона Android, который отображается как устройство MTP в Windows. Перед копированием для подключения я нашел два фрагмента кода для подключения и создания объекта (я думаю) для телефона .

Код 1

function Get-PhoneMainDir($phoneName)
{
  $o = New-Object -com Shell.Application
  $rootComputerDirectory = $o.NameSpace(0x11)
  $phoneDirectory = $rootComputerDirectory.Items() | Where-Object {$_.Name -eq $phoneName} | select -First 1

  if($phoneDirectory -eq $null)
  {
    throw "Not found '$phoneName' folder in This computer. Connect your phone."
  }

  return $phoneDirectory;
}
$phoneName = "ONEPLUS A3003"
$phoneRootDir = Get-PhoneMainDir $phoneName
Write-Host $phoneRootDir

Код 2

function Get-Phone
{
    param($phoneName)
    $shell = Get-ShellProxy
    # 17 (0x11) = ssfDRIVES from the ShellSpecialFolderConstants (https://msdn.microsoft.com/en-us/library/windows/desktop/bb774096(v=vs.85).aspx)
    # => "My Computer" — the virtual folder that contains everything on the local computer: storage devices, printers, and Control Panel.
    # This folder can also contain mapped network drives.
    $shellItem = $shell.NameSpace(17).self
    $phone = $shellItem.GetFolder.items() | where { $_.name -eq $phoneName }
    return $phone
}
function Get-ShellProxy
{
    if( -not $global:ShellProxy)
    {
        $global:ShellProxy = new-object -com Shell.Application
    }
    $global:ShellProxy
}
$phoneName ="ONEPLUS A3003"
$phone = Get-Phone -phoneName $phoneName
Write-Host $phone
Write-Host $phone.GetFolder.Items()

попытка напечатать $phoneRootDir в коде 1, а также $phone и $phone.GetFolder.Items() дает мне

Система.__ComObject

как мне получить список файлов и пройти через этот объект?


person Kaushik Kyle    schedule 26.03.2020    source источник
comment
Какую версию Android вы используете? Какую ОС вы используете? Какая версия PowerShell. Зачем проходить через все это и просто монтировать телефон как диск и копировать как обычно? В сети есть несколько статей с пошаговыми инструкциями, как это сделать.   -  person postanote    schedule 27.03.2020
comment
Android 9, windows 10 pro 1909, версия powershell - 5.1.18362.628, спасибо за информацию, попробую этот метод.   -  person Kaushik Kyle    schedule 27.03.2020


Ответы (1)


Чтобы просмотреть дополнительную информацию о COM-объекте, вы можете распечатать его, например. через Write-Host ($phone| Format-Table | Out-String)

Затем вы увидите список свойств объекта и действительно сможете перемещаться по путям с помощью object.GetFolder.items().

person Matthias Muth    schedule 24.04.2020