Как получить доступ к содержимому устройства MTP с помощью powershell? - PullRequest
0 голосов
/ 27 марта 2020

Я новичок в скриптовании 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 () дает мне

System .__ ComObject

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

1 Ответ

0 голосов
/ 25 апреля 2020

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

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

...