ほとんどの作業はリモートで行われるため、すべてのツールをFTPサーバーからクライアントのPCにダウンロードするバッチスクリプトがあります。テキストをコピーしてクライアントのPCのメモ帳に貼り付け、バッチとして保存して実行するだけです。
これはうまく機能しますが、問題は、私が使用するプログラムが頻繁に更新されるため、古いバージョンをダウンロードすることです。少し調べてみたところ、PowerShellはWebから直接ファイルをダウンロードできることがわかりました。
WindowsのスクリプトからHTTP経由でファイルをダウンロード
バッチファイルからPowerShellコマンドを実行する方法
すべてが揃っているように見えますが、PowerShellについては何も知りません。さらに、バッチスクリプトでPowerShellを呼び出して、PowerShellで記述を開始することはできないと思います。
これが最終目標です。 PowerShellを使用してさまざまなWebサイトからファイルをダウンロードするバッチスクリプトを作成するには(URLを提供します)。 FTPサーバーからファイルをダウンロードする代わりに、スクリプトはソースからプログラムを直接ダウンロードします。
よろしくお願いします。
このメソッドはPowerShellバージョン2以降互換を使用し、System.Net.WebClientクラスを使用します。
配列を作成し、必要なURLを配列に追加します。ダウンロードの場所を指定し、配列内の各アイテムに対して、PowerShell -Split演算子を使用して最後のスラッシュの文字列に対応する文字列にSystem.Net.WebClientファイルパラメーターが必要とするファイル名を生成します。
$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)
}
または、@ McDonaldのコメントに従ってInvoke-WebRequestまたはInvoke-WebRequestエイリアスwgetを使用します。これらはどちらもPowerShellバージョン以降で使用できますが、遅くなる可能性があります
$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"
またはPowerShellから.ps1ファイルを実行する
[〜#〜] edit [〜#〜]コメントを私の回答に含めるには、配列を複数列配列に変更し、項目見出しをとして呼び出します。属性
$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)
}
これは、存在しない場合に作成できるファイルからいくつかのバッチコードをダウンロードするために作成した例です。もちろん、このファイルに必要な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
::*************************************************************************