Команда Powershell для возврата папки загрузки Chrome в виде строки - PullRequest
0 голосов
/ 04 марта 2020

Я ищу команду для Powershell, которая будет возвращать строку, содержащую путь к файлу, использованный для его настроенной папки загрузок.

Я пытаюсь сделать что-то вроде Get-Content для $ settings.download.default_directory, но не получаю результатов, не уверен, что я делаю неправильно.

Ответы [ 3 ]

0 голосов
/ 04 марта 2020

Я только что понял, что не нужно возиться с 'Select-String' - файл prefs уже разделен запятыми, поэтому мы можем просто разделить запятые и искать каталог для загрузки на основе частичной строки.

Это должно сработать (замените '[user]' в первой строке вашей учетной записи):

$prefs = Get-Content 'C:\Users\[user]\AppData\Local\Google\Chrome\User Data\Default\Preferences' # Create variable containing Chrome's preferences file for [user]
$prefs = $prefs.Split(',') # Split the file on commas (this converts the comma-separated string into an array of values)
$downloadString = $prefs | Where-Object {$_ -like '*download":*'} # Locate the string we want by searching on part of it that we already know will be there (note the '-like' and the wildcard asterisks)
$downloadString = $downloadString.Split('"')[5] # Split the string on double quotes and select the sixth item in the resulting array (arrays produced by 'Split' start at zero), which is the path we're looking for
$downloadString = $downloadString.Replace('\\','\') # Replace the double slashes in the path with single slashes
$downloadString # Print the result to the screen

Существуют различные способы сжать это до пары строк, но я подумал, что Вы новичок, таким образом, было бы легче увидеть, как это работает.

Надеюсь, это помогло!

0 голосов
/ 04 марта 2020

Chrome использует файл Preferences (без расширения) для хранения пути к папке загрузок в параметре default_directory ЕСЛИ пользователь установил пользовательский путь в настройках Chrome .
Этот файл настроек является файлом JSON и может быть легко прочитан PowerShell.

Если пользователь не настроил пользовательский путь, этот параметр недоступен в файле настроек и Chrome будет использовать все, что установлено для текущего пользователя в Windows.

. Для этого вам потребуется либо прочитать путь из реестра, либо использовать COM-объект Shell.Application.

Оба обрабатываются в коде ниже:

$prefsPath = "$env:localappdata\Google\Chrome\User Data\Default\Preferences"
if (Test-Path -Path $prefsPath -PathType Leaf) {
    $prefs = Get-Content -Path $prefsPath | ConvertFrom-Json
    $downloadFolder = $prefs.download.default_directory
}

if ([string]::IsNullOrWhiteSpace($downloadFolder)) {
    # Chrome is using the download folder set in Windows for the current user

    # read from registry:
    # the Downloads property is stored under Guid instead of friendly name..
    $regPath = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders'
    $downloadFolder = Get-ItemPropertyValue -Path $regPath -Name '{374DE290-123F-4565-9164-39C4925E467B}'

    # or use the Shell.Application COM object
    # $downloadFolder = (New-Object -ComObject Shell.Application).NameSpace('shell:Downloads').Self.Path
}

$downloadFolder
0 голосов
/ 04 марта 2020

(РЕДАКТИРОВАТЬ: У моего другого поста есть рабочее решение. Я оставлю это здесь, на случай, если вы найдете его полезным.)

Я могу помочь вам в этом, но не во всем .

Если вы ссылаетесь на Chrome на Windows, он обычно сохраняет свои настройки в "C: \ Users \ [user] \ AppData \ Local \ Google \ Chrome \ User Data \ По умолчанию \ Preferences». Поэтому вы должны начать что-то вроде:

$prefs = Get-Content "C:\Users\[user]\AppData\Local\Google\Chrome\User Data\Default\Preferences"

(очевидно, замените «[user]» на имя вашей учетной записи.)

«Предпочтения» - это текстовый файл, состоящий из одного , giganti c строка данных, разделенных запятыми. Вот где он указывает мой каталог для скачивания, например:

,"download":{"default_directory":"C:\\Users\\Matt\\Desktop",

Ваш следующий шаг - сделать '$ prefs | Select-String [что-то ...] ', чтобы проанализировать этот файл для этой строки. Тем не менее, я не знаю, как сделать эту часть. Все дело в том, чтобы сказать это: «искать», «скачать»: «, затем вытащить все из запятой перед« загрузкой »до следующей запятой».

Получив это, вы можете разделить на двойные кавычки, чтобы изолировать путь к каталогу, а затем удалите двойные косые черты. Итак, если у вас есть указанная выше строка в переменной «$ download», это может быть что-то вроде:

$download = $download.Split('"')[5]
$download = $download.Replace('\\','\')
$download

Или вы можете сделать это в одной строке, например:

($download.Split('"')[5]).Replace('\\','\')

Кстати, будьте супер осторожны с цитатами по этому заданию! Поскольку Chrome широко использует двойные кавычки в этом файле настроек, обязательно всегда заключайте в одинарные кавычки вещи, иначе это не сработает.

Также, как примечание: в PowerShell текст в одинарных кавычках не является ' t анализируется, тогда как текст в двойных кавычках. Так что это еще одна причина, почему мы должны заключать вещи в одинарные кавычки: мы хотим, чтобы текст был простой строкой. Если бы строка содержала, скажем, «$ path», и мы заключили ее в двойные кавычки, она интерпретировала бы ее как существующую системную переменную «$ path» и попыталась бы что-то с ней сделать, что было бы ... нежелательно !

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...