Я управляю Invoke-WebRequest
в Windows Powershell от имени администратора.
Когда я запускаю следующую команду: Invoke-WebRequest http://speedtest.newark.linode.com/100MB-newark.bin -OutFile $env:TEMP
(как рекомендовано здесь), Я получаю сообщение об ошибке Access to Path is Denied
(см. изображение ниже).
То, что я пробовал, но не помогло:
Read-Only
установка разрешений в Temp
свойства папок.$env:TEMP
к C:\
.Ошибка одинакова для всех протестированных операционных систем.
Похоже, вам отказано в доступе, потому что параметр OutFile пытается создать файл с именем TEMP в папке AppData / Local, но уже существует каталог с именем TEMP, поэтому существует конфликт имен. Я получил ту же ошибку при выполнении вашей команды, как есть, затем я добавил имя файла, и это сработало. Увидеть ниже:
Invoke-WebRequest http://speedtest.newark.linode.com/100MB-newark.bin -OutFile $env:TEMP\100MB-newark.bin
Ваша команда работает в моей системе (Windows-7 SP1 x64). Работать как обычный пользователь и как администратор работают ... (хотя это кажется рискованным для администратора). Я тестировал как x86, так и x64 версии Powershell.
Algorithm Hash Path --------- ---- -------------------- SHA256 A99192624C502AF0BF635D1186AC6ECAD613F0E4A48F5BA8D47B6E261C204908 C:\Temp\scratch\100MB-newark.bin SHA1 79105A819B8A0FB67DDCDEADC8E47C7F59DB8677 C:\Temp\scratch\100MB-newark.bin MD5 5F293997D8F256F9C6880272E0773429 C:\Temp\scratch\100MB-newark.bin
Вот изящная маленькая функция Get-Webfile, которую я использовал: добавьте в свой $ PROFILE или. источник его. :)
Function Get-Webfile ($url)
{
$dest=(Join-Path $pwd.Path $url.SubString($url.LastIndexOf('/')))
Write-Host "Downloading $url`n" -ForegroundColor DarkGreen;
$uri=New-Object "System.Uri" "$url"
$request=[System.Net.HttpWebRequest]::Create($uri)
$request.set_Timeout(5000)
$response=$request.GetResponse()
$totalLength=[System.Math]::Floor($response.get_ContentLength()/1024)
$length=$response.get_ContentLength()
$responseStream=$response.GetResponseStream()
$destStream=New-Object -TypeName System.IO.FileStream -ArgumentList $dest, Create
$buffer=New-Object byte[] 10KB
$count=$responseStream.Read($buffer,0,$buffer.length)
$downloadedBytes=$count
while ($count -gt 0)
{
[System.Console]::CursorLeft=0
[System.Console]::Write("Downloaded {0}K of {1}K ({2}%)", [System.Math]::Floor($downloadedBytes/1024), $totalLength, [System.Math]::Round(($downloadedBytes / $length) * 100,0))
$destStream.Write($buffer, 0, $count)
$count=$responseStream.Read($buffer,0,$buffer.length)
$downloadedBytes+=$count
}
Write-Host ""
Write-Host "`nDownload of `"$dest`" finished." -ForegroundColor DarkGreen;
$destStream.Flush()
$destStream.Close()
$destStream.Dispose()
$responseStream.Dispose()
}
** Возможно, команда Measure-Command могла бы быть (более) полезной где-нибудь в этом конвейере для обеспечения скорости.