PowerShell 2 устарел и больше не получает никаких обновлений и имеет серьезные проблемы с рисками по сравнению с текущим состоянием отрасли и тем, что более новые версии предоставляют для контроля.
Win7 может использовать PowerShell v5x.Я настоятельно рекомендую вам обновить и использовать веб-командлеты для этих усилий и воспользоваться преимуществами новых версий.
Теперь к вам проблема.Здесь у вас есть проблемы с синтаксисом, даже то, как вы используете PowerShell v2.
@ echo off --- это cmd.exe .bat / .cmd, а не PowerShell.
Если вы откроете это в ISE или VSCode, вы увидите, что это показывается как ошибка.Таким образом, это не нужно.
Для того, что вы ищете, посмотрите на эту статью: 3 способа загрузки файлов с помощью PowerShell
# 1. Invoke-WebRequest
$url = "http://mirror.internode.on.net/pub/test/10meg.test"
$output = "$PSScriptRoot\10meg.test"
$start_time = Get-Date
Invoke-WebRequest -Uri $url -OutFile $output
Write-Output "Time taken: $((Get-Date).Subtract($start_time).Seconds) second(s)"
# 2. System.Net.WebClient
$url = "http://mirror.internode.on.net/pub/test/10meg.test"
$output = "$PSScriptRoot\10meg.test"
$start_time = Get-Date
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($url, $output)
#Or
(New-Object System.Net.WebClient).DownloadFile($url, $output)
Write-Output "Time taken: $((Get-Date).Subtract($start_time).Seconds) second(s)"
# 3. Start-BitsTransfer
$url = "http://mirror.internode.on.net/pub/test/10meg.test"
$output = "$PSScriptRoot\10meg.test"
$start_time = Get-Date
Import-Module BitsTransfer
Start-BitsTransfer -Source $url -Destination $output
#Or
Start-BitsTransfer -Source $url -Destination $output -Asynchronous
Write-Output "Time taken: $((Get-Date).Subtract($start_time).Seconds) second(s)"
Это было быМой подход к вашему варианту использования:
# DownloadPic.ps1
'https://cdn.bringatrailer.com/wp-content/uploads/2018/01/GTX-Low-Res-4-940x627.jpg',
'https://upload.wikimedia.org/wikipedia/commons/thumb/1/1f/2019_Ford_Mustang_GT_5.0_facelift.jpg/1200px-2019_Ford_Mustang_GT_5.0_facelift.jpg' |
foreach{
$webclient = New-Object System.Net.WebClient
$filename = [System.IO.Path]::GetFileName($PSItem)
$file = "E:\Temp\$filename"
$webclient.DownloadFile($url,$file)
}
Тем не менее, если вы пытаетесь выполнить традиционный двойной щелчок для запуска файла, который изначально не работает с PowerShell, значит, вы используете командный файлза усилие двойного щелчка, тогда я получаю это.
Вы сохранили бы вышеупомянутое как файл .ps1, и в своем пакетном файле просто назовите его, как-то так.
DownloadPic.bat
::rem batch file calling powershell to download pics.
@echo off
Powershell -noprofile -File "%~E:\temp\DownloadPic.ps1"
См. Эти вопросы и ответы
... и примечание.Я просто написал это быстро и протестировал, и он загрузил картинки, как и ожидалось.
Тем не менее, вы можете просто запустить приглашение PowerShell и запустить скрипт напрямую.