Вызовите-WebRequest Access to Path, Отклонен в UnauthorizedAccessException

Я работаю Invoke-WebRequest в Windows Powershell как Администратор.

Когда я выполняю следующую команду: Invoke-WebRequest http://speedtest.newark.linode.com/100MB-newark.bin -OutFile $env:TEMP (как рекомендуется здесь), я получаю ошибку при утверждении Access to Path is Denied (см. изображение ниже).

enter image description here

Вещи, которые я попробовал, который не работал:

  • Выполнил команду на Windows Server 2008 и 2012, а также, Windows 8.1.
  • Неконтролируемый Read-Only установка полномочий под Temp свойства папок.
  • Я изменился $env:TEMP кому: C:\.

Ошибка последовательна через все протестированные операционные системы.

5
задан 13 April 2017 в 15:14
2 ответа

Похоже, что вам отказали в доступе, потому что параметр OutFile пытается создать файл с именем TEMP в папке AppData/Local, но уже есть каталог с именем TEMP, так что есть конфликт именования. Я получил такую же ошибку, выполняя вашу команду, а затем добавил имя файла, и это сработало. Смотрите ниже:

Invoke-WebRequest http://speedtest.newark.linode.com/100MB-newark.bin -OutFile $env:TEMP\100MB-newark.bin
6
ответ дан 3 December 2019 в 01:30

Ваша команда работает в моей системе (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 могла бы быть (более) полезной где-нибудь в этом конвейере для обеспечения скорости.

0
ответ дан 3 December 2019 в 01:30

Теги

Похожие вопросы