Объединение Start-BitsTransfer с Select-String без временного файла - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь выбрать строку в удаленном файле. В настоящее время я загружаю документ во временный файл, а затем ищу там свою строку. Я пытаюсь передать команды вместе, но кажется, что Start-BitsTransfer нужен файл назначения. Могу ли я сделать это без временного файла?

Start-BitsTransfer -Source https://www.remoteserver/file.html -Destination C:\temp.html
$matches = Get-Content C:\temp.html -ErrorAction SilentlyContinue | Select-String '(http.*pdf)'
$matches[0].Matches.Groups[1].Value

Кроме того, возможно ли вывести первое совпадение в одну строку, не создавая переменную?

1 Ответ

0 голосов
/ 11 ноября 2018

похоже, что Start-BitsTransfer нужен файл назначения.Могу ли я сделать это без временного файла?

Нет, потому что PowerShell не имеет конструкции, эквивалентной заменам процесса вывода Bash (>(...)) [1] , чточто вам нужно здесь:

# Wishful thinking - does NOT work.
Start-BitsTransfer -Source https://www.remoteserver/file.html -Destination `
  >(Select-String '(http.*pdf)')

Однако вы можете использовать Invoke-RestMethod для извлечения текстового файла, такого как страница HTML, через HTTP и вывода его содержимого в поток успеха, так что выможет передать его другим командам:

Invoke-RestMethod -UseBasicParsing https://www.remoteserver/file.html | 
  Select-String '(http.*pdf)'

возможно ли вывести первое совпадение в одну строку без необходимости создания переменной?

Да, вы можетеиспользуйте вызов ForEach-Object для извлечения интересующей группы захвата:

Invoke-RestMethod -UseBasicParsing https://www.remoteserver/file.html | 
  Select-String -List '(http.*pdf)' |
    ForEach-Object { $_.Matches[0].Groups[1].Value }

Обратите внимание, что -List останавливает Select-String после первой строки, в которой найдено совпадение, т.е. после первого совпадения ввход;опустите его, чтобы найти все совпадения в файле (по одному на строку; чтобы найти несколько совпадений на строку , добавьте -AllMatches).


[1] Создание PowerShellЗамена процесса поддержки является предметом этого запроса функции на GitHub .

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