2

Поскольку большая часть моей работы выполняется удаленно, у меня есть пакетный скрипт, который загружает все мои инструменты с моего FTP-сервера на ПК клиента. Я просто копирую и вставляю текст в блокнот на клиентском ПК, сохраняю его как пакет и запускаю.

Это прекрасно работает, но проблема в том, что программы, которые я использую, обновляются время от времени - поэтому я буду загружать старые версии. Проведя небольшое исследование, я обнаружил, что PowerShell может загружать файлы прямо из Интернета.

Скачать файл через HTTP из скрипта в Windows

Как выполнить команды powershell из командного файла?

Кажется, что все части есть, но я ничего не знаю о PowerShell, и я абсолютный любитель с пакетной. Кроме того, я думаю, вы не можете просто вызвать PowerShell в пакетном скрипте и начать писать в PowerShell.

Итак, вот конечная цель; Написать пакетный скрипт, который использует powershell для загрузки файлов с разных веб-сайтов (я бы предоставил URL-адреса). Вместо загрузки файлов с моего FTP-сервера, скрипт будет загружать программы прямо из источника.

Огромное спасибо заранее.

2 ответа2

1

Этот метод использует PowerShell версии 2 и выше и использует System.Net.Класс WebClient.

Создает массив, а затем добавляет необходимые URL-адреса в массив. Укажите ваше местоположение загрузки, затем для каждого элемента в вашем массиве создайте имя файла, которое System.Net.Параметр файла WebClient требуется с помощью оператора PowerShell -Split для строки из последнего вхождения прямой косой черты.

$Urls = @()
$Urls += "https://your/first/download/path/.ext"
$Urls += "https://your/next/download/path/.ext"

$OutPath = "C:\Path\to\download\"

ForEach ( $item in $Urls) {
$file = $OutPath +  ($item).split('/')[-1]
(New-Object System.Net.WebClient).DownloadFile($item, $file)
}

В качестве альтернативы используйте Invoke-WebRequest в соответствии с комментарием @ McDonald или wget псевдонима Invoke-WebRequest, которые доступны начиная с PowerShell версии 3 и выше, но могут работать медленнее.

$Urls = @()
$Urls += "https://your/first/download/path/.ext"
$Urls += "https://your/next/download/path/.ext"

$OutPath = "C:\Path\to\download\"

ForEach ( $item in $Urls) {
$file = $OutPath +  ($item).split('/')[-1]
Invoke-WebRequest -Uri $i -Outfile $file
}

Сохраните любой сценарий как «C:\Path\to\download_script.ps1»

создать и запустить файл .bat с содержимым

PowerShell -File  "C:\Path\to\download_script.ps1"

или запустите файл .ps1 из PowerShell

РЕДАКТИРОВАТЬ Чтобы включить ваш комментарий в мой ответ, вы можете изменить массив в многостолбцовый массив и назвать заголовок элемента как. атрибут

$Urls = @()
$item = "" | Select path,outpath,name
$item.path = "https://your/first/download/path/.ext"
$item.outpath = "C:\Path\to\download\"
$item.name = "Name1.ext"
$Urls = $Urls + $item

$item = "" | Select path,outpath,name
$item.path = "https://your/next/download/path/.ext"
$item.outpath = "C:\Path\to\download\"
$item.name = "Name2.ext"
$Urls = $Urls + $item

ForEach ( $item in $Urls) {
$file = ($item.outpath) + ($item.name)
(New-Object System.Net.WebClient).DownloadFile($item.path, $file)
}
1

Вот пример, который я сделал для того, чтобы вы загрузили некоторые пакетные коды из файла, который можно создать, если он не существует, и, конечно, вы можете добавить в этот файл то, что вы хотите от URL!

Так что просто попробуйте и скажите мне результат на вашей стороне!

@echo off
Mode 110,3 & color 0A
Title Download file from web using powershell and batch by Hackoo 2017
Set "List_Urls_File=Urls.txt"
If not exist "%List_Urls_File%" Call :Create_Urls_File
Setlocal enabledelayedexpansion
@For /f "delims=" %%a in ('Type "%List_Urls_File%"') do (
    Set "URL=%%a"
    Rem we set the Filename from the variable !url!
    @for %%# in (!url!) do ( set "File=%%~xn#" )
    Rem Check if the file name contains a dot "." 
    Rem If not we increment the counter +1 for file to be download
        ECHO !File! | FIND /I ".">Nul 2>&1
        If "!errorlevel!" NEQ "0" (
            Set /a Count+=1
            cls & echo(
            echo               Downloading file "File-!Count!.bat" from URL : "!URL!"
            Call :BalloonTip 'information' 10 '"Downloading File-!Count!.bat"' "'Please wait... Downloading File-!Count!.bat....'" 'info' 4
            Call :Download "%%a" "File-!Count!.bat"
        ) else (
            cls & echo(
            echo    Downloading file "!File!" from URL : "!URL!"
            Call :BalloonTip 'information' 10 '"Downloading !File!"' "'Please wait... Downloading !File!....'" 'info' 4

            Call :Download "%%a" "!File!"
        )
)
Explorer "%~dp0" & exit
::*********************************************************************************
:Download <url> <File>
Powershell.exe -command "(New-Object System.Net.WebClient).DownloadFile('%1','%2')"
exit /b
::*********************************************************************************
:Create_Urls_File
(
    echo https://pastebin.com/raw/XvyhRzT6
    echo https://pastebin.com/raw/QqnZ0MjQ
    echo https://pastebin.com/raw/tHsKw15V
    echo https://pastebin.com/raw/VCnTbLB6
    echo https://pastebin.com/raw/3zUTrWUz
    echo https://pastebin.com/raw/31auQeFz
    echo https://pastebin.com/raw/xF0uXThH
    echo https://pastebin.com/raw/uzsGQD1h
    echo https://pastebin.com/raw/3TmVYiZJ
    echo https://pastebin.com/raw/Ntc8SZLU
    echo https://pastebin.com/raw/jnpRBhwn
    echo https://www.virustotal.com/static/bin/vtuploader2.2.exe
    echo http://devbuilds.kaspersky-labs.com/devbuilds/KVRT/latest/full/KVRT.exe
)>"%List_Urls_File%"
exit /b
::*********************************************************************************
:BalloonTip $notifyicon $time $title $text $icon $Timeout
PowerShell  ^
  [reflection.assembly]::loadwithpartialname('System.Windows.Forms') ^| Out-Null; ^
 [reflection.assembly]::loadwithpartialname('System.Drawing') ^| Out-Null; ^
 $notify = new-object system.windows.forms.notifyicon; ^
  $notify.icon = [System.Drawing.SystemIcons]::%1; ^
  $notify.visible = $true; ^
  $notify.showballoontip(%2,%3,%4,%5); ^
  Start-Sleep -s %6; ^
  $notify.Dispose()
%End PowerShell%
exit /B
::*************************************************************************

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .