похоже, что 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 .