Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » PowerShell

Модерирует : KLASS, IFkO

KLASS (16-06-2020 08:14): Тему эту открывал, чтобы LevT не гадил в других, но он проигнорировал ее, сказав, что сначала надо было с ним посоветоваться (!). Ну, и так как здесь ничего нового, то тему закрываю.  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

   

KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вынес в отдельную тему,  присоединяйтесь.

Всего записей: 9665 | Зарегистр. 12-10-2001 | Отправлено: 05:15 04-04-2020
insorg



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Присоединяюсь, как раз два схожих вопроса из ряда практических.
 
Необходимо скачать файл из инета средствами PS (Win7) из батника.
 
1.
Вот так оно работает.
Код:
@powershell -Command "(New-Object Net.WebClient).DownloadFile('https://totalcommander.ch/win/tcmd951x32_64.exe', '%temp%\tcmd951x32_64.exe')"
А вот так
Код:
@powershell -Command "(New-Object Net.WebClient).DownloadFile('https://drivers.amd.com/drivers/win7-radeon-software-adrenalin-2020-edition-20.4.2-may25.exe', '%temp%\win7-radeon-software-adrenalin-2020-edition-20.4.2-may25.exe')"
уже не хочет.
Надо отдать серваку поле referer на https://support.amd.com/, иначе облом.
Они даже на сайте пишут об этом:
Цитата:
You copy and pasted the download link or clicked “Save As”
When you copy and paste a link or right click on it and select “Save As,” your browser will not send a referrer and our site will not allow the download. Please click the Back button in your browser and simply click the link instead.

Как повершелью передать эту самую строку?
 
2.
Аналогично пытаемся скачать
Код:
@powershell -Command "(New-Object Net.WebClient).DownloadFile('https://go.skype.com/windows.desktop.download', '%temp%\Skype_Desktop_Setup.exe')"
, но грядёт облом, ибо ссылка не совсем прямая, как можно было бы хотеть.
Есть какой-то параметр, чтобы культурно дать понять, что надо скачать файл именно по этой ссылке?

Всего записей: 1885 | Зарегистр. 04-11-2010 | Отправлено: 16:09 12-06-2020 | Исправлено: insorg, 16:20 12-06-2020
insorg



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Эх, чем черт не шутит, но попробовал http вместо https, и не помогло...
Есть мысли, что можно сделать?

Всего записей: 1885 | Зарегистр. 04-11-2010 | Отправлено: 13:42 13-06-2020 | Исправлено: insorg, 13:43 13-06-2020
Fenrizz



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
insorg
1.  
$wc = New-Object System.Net.WebClient
$wc.Headers.Add("referer", "https://drivers.amd.com/drivers/");
$wc.DownloadFile('https://drivers.amd.com/drivers/win7-radeon-software-adrenalin-2020-edition-20.4.2-may25.exe', '%temp%\win7-radeon-software-adrenalin-2020-edition-20.4.2-may25.exe')
 
 

Всего записей: 399 | Зарегистр. 12-09-2017 | Отправлено: 12:29 15-06-2020
insorg



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz
Что-то пошло не так...

Код:
Исключение при вызове "DownloadFile" с "2" аргументами: "Исключение во время за
проса WebClient."
C:\Users\Administrator\AppData\Local\Temp\drv.ps1:3 знак:17
+ $wc.DownloadFile <<<< ('https://drivers.amd.com/drivers/win7-radeon-software-
adrenalin-2020-edition-20.4.2-may25.exe', '%temp%\win7-radeon-software-adrenali
n-2020-edition-20.4.2-may25.exe')
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException
 
Для продолжения нажмите любую клавишу . . .

Всего записей: 1885 | Зарегистр. 04-11-2010 | Отправлено: 12:56 15-06-2020 | Исправлено: insorg, 12:56 15-06-2020
Fenrizz



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
insorg
Не очень понятно, что именно? Попробуйте заменить %temp% на $Env:TEMP

Всего записей: 399 | Зарегистр. 12-09-2017 | Отправлено: 13:19 15-06-2020
insorg



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Из ps1 файла временно выкинул %temp% вообще, заработало.
Теперь осталось это всё завернуть культурно в батник.
Вариант со знаками ^ не прокатил.

Всего записей: 1885 | Зарегистр. 04-11-2010 | Отправлено: 13:38 15-06-2020
Fenrizz



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А так?  
 
$wc.DownloadFile('https://drivers.amd.com/drivers/win7-radeon-software-adrenalin-2020-edition-20.4.2-may25.exe', $Env:TEMP + '\win7-radeon-software-adrenalin-2020-edition-20.4.2-may25.exe')

Всего записей: 399 | Зарегистр. 12-09-2017 | Отправлено: 13:42 15-06-2020
bytie

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz
insorg
Развёртывание переменных допускается только в строках, созданных двумя кавычками. В строках ординарных кавычек переменные не интерпретируются. Так что, не вдаваясь в код, вместо

Код:
$wc = New-Object System.Net.WebClient
$wc.Headers.Add("referer", "https://drivers.amd.com/drivers/");
$wc.DownloadFile('https://drivers.amd.com/drivers/win7-radeon-software-adrenalin-2020-edition-20.4.2-may25.exe', '%temp%\win7-radeon-software-adrenalin-2020-edition-20.4.2-may25.exe')

лучше

Код:
$wc = New-Object System.Net.WebClient
$wc.Headers.Add('referer', 'https://drivers.amd.com/drivers/');
$wc.DownloadFile('https://drivers.amd.com/drivers/win7-radeon-software-adrenalin-2020-edition-20.4.2-may25.exe', "$env:TEMP\win7-radeon-software-adrenalin-2020-edition-20.4.2-may25.exe")

У меня этот фрагмент отработал без ошибок и скачал файл.

Всего записей: 260 | Зарегистр. 18-08-2005 | Отправлено: 13:43 15-06-2020 | Исправлено: bytie, 13:44 15-06-2020
Fenrizz



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bytie
Спасибо за подсказку, но у меня и с одинарными работает
$Env:TEMP + '\win7-radeon-software-adrenalin-2020-edition-20.4.2-may25.exe'
или -join($env:TEMP, '\win7-radeon-software-adrenalin-2020-edition-20.4.2-may25.exe')

Всего записей: 399 | Зарегистр. 12-09-2017 | Отправлено: 13:52 15-06-2020 | Исправлено: Fenrizz, 13:54 15-06-2020
insorg



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
$env:TEMP\

Проверил, с кавычками-одинарками тоже всё отлично сработало, я все кавычки такие пишу для ps, так удобнее в батники заворачивать.
 
Пока собрал батник в таком немного костыльном виде, зато работает.
Ещё бы как-то Headers.Add и DownloadFile можно было в одну строку собрать, чтоб вообще передать из батника сплошной портянкой, без промежуточных файлов...

Всего записей: 1885 | Зарегистр. 04-11-2010 | Отправлено: 13:59 15-06-2020 | Исправлено: insorg, 14:00 15-06-2020
bytie

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
insorg

Цитата:
чтоб вообще передать из батника сплошной портянкой, без промежуточных файлов

Используйте pwsh -EncodedCommand

Код:
-EncodedCommand
    Accepts a base-64-encoded string version of a command. Use this parameter
    to submit commands to Windows PowerShell that require complex quotation
    marks or curly braces.

Всего записей: 260 | Зарегистр. 18-08-2005 | Отправлено: 14:17 15-06-2020 | Исправлено: bytie, 14:18 15-06-2020
insorg



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
EncodedCommand
Не, это уже перебор, я тогда сам не прочитаю свой код.
Проще тогда с промежуточными эхами играться, так хотя бы всё на виду.

Всего записей: 1885 | Зарегистр. 04-11-2010 | Отправлено: 14:25 15-06-2020
Fenrizz



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Ещё бы как-то Headers.Add и DownloadFile можно было в одну строку собрать, чтоб вообще передать из батника сплошной портянкой, без промежуточных файлов...

 
Через точку с запятой
 
@powershell -Command "$wc = New-Object System.Net.WebClient; $wc.Headers.Add('referer', 'https://drivers.amd.com/drivers/');  
 $wc.DownloadFile('https://drivers.amd.com/drivers/win7-radeon-software-adrenalin-2020-edition-20.4.2-may25.exe', $env:TEMP + '\win7-radeon-software-adrenalin-2020-edition-20.4.2-may25.exe')"

Всего записей: 399 | Зарегистр. 12-09-2017 | Отправлено: 14:34 15-06-2020 | Исправлено: Fenrizz, 06:39 16-06-2020
farag



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz
Может, тогда будут идеи насчет аналогичной проблемы: http://forum.ru-board.com/topic.cgi?forum=62&topic=30859&start=2860#19
 
Вообще скрипт я уже накатал рабочий под другую ссылку: https://github.com/farag2/Adobe-Acrobat-DC-Setup/blob/master/Download.ps1
, но из спортивного интереса хочется добить.

Всего записей: 1711 | Зарегистр. 27-07-2009 | Отправлено: 14:45 15-06-2020
insorg



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Работает. Спасибо.
 
А с выдёргиванием скайпа что-то получится сделать?
 
Т.к. не скайпом единым. Те же динамические ссылки на свежие версии браузеров, напрмиер... Но для начала достаточно на примере скайпа.

Всего записей: 1885 | Зарегистр. 04-11-2010 | Отправлено: 14:47 15-06-2020 | Исправлено: insorg, 14:49 15-06-2020
farag



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
insorg
Работает же

Код:
 
# Скачиваем в папку "Загрузки"
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$DownloadsFolder = Get-ItemPropertyValue -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "{374DE290-123F-4565-9164-39C4925E467B}"
$Parameters = @{
    Uri = "https://go.skype.com/windows.desktop.download"
    OutFile = "$DownloadsFolder\Skype.exe"
    Verbose = [switch]::Present
}
Invoke-WebRequest @Parameters
 
# Переименовываем файл на основе версии .exe
$FileVersion = (Get-ItemProperty -Path "$DownloadsFolder\Skype.exe").VersionInfo.FileVersion
Get-Item -Path "D:\Downloads\Skype.exe" | Rename-Item -NewName {$_.Name.Replace("Skype","Skype-$FileVersion")}
#Get-Item -Path "D:\Downloads\Skype.exe" | Rename-Item -NewName {$_.BaseName + "-$FileVersion" + $_.Extension} -Force
 

Всего записей: 1711 | Зарегистр. 27-07-2009 | Отправлено: 15:17 15-06-2020
Fenrizz



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
insorg
Со скайпом - на чистом Powershell вряд ли, там редирект, с curl-ом, можно - дёргаете ссылку https://get.skype.com/go/getskype-skypeforwindows
И в заголовке ответа в поле Location будет прямая ссылка.
 
Хотя можно и на PS получить заголовок и взять из него ссылку.

Всего записей: 399 | Зарегистр. 12-09-2017 | Отправлено: 15:21 15-06-2020 | Исправлено: Fenrizz, 15:32 15-06-2020
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
insorg

Цитата:
Теперь осталось это всё завернуть культурно в батник.

Вариант без проблем с кавычками и прочим, но с проблемой передачи параметров батнику и проблемами некоторых встроенных переменных в PS

Код:
<# : Сохранять в UTF8 без BOM с расширением .CMD
@echo off
chcp 65001 >nul
set "PSCommandPath=%~f0"
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -nol -nop -exe unrestricted -c "&{[ScriptBlock]::Create((gc -lit $env:PSCommandPath -enc 'UTF8') -join [Char]10).Invoke()}"
exit /b
#>
 
Write-Host "PowerShell часть"

Можно и не в UTF8, если внести соответствующие изменения

----------
Разум когда-нибудь победит

Всего записей: 2391 | Зарегистр. 09-02-2003 | Отправлено: 16:31 15-06-2020
insorg



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz

Цитата:
Хотя можно и на PS получить заголовок и взять из него ссылку

Буду весьма признателен, если заработает.

Всего записей: 1885 | Зарегистр. 04-11-2010 | Отправлено: 16:42 15-06-2020
   

Страницы: 1 2

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » PowerShell
KLASS (16-06-2020 08:14): Тему эту открывал, чтобы LevT не гадил в других, но он проигнорировал ее, сказав, что сначала надо было с ним посоветоваться (!). Ну, и так как здесь ничего нового, то тему закрываю.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru