O acesso Invoke-WebRequest ao caminho é negado UnauthorizedAccessException

4

Estou executando um Invoke-WebRequest em um Windows Powershell como administrador.

Quando eu executo o seguinte comando: Invoke-WebRequest http://speedtest.newark.linode.com/100MB-newark.bin -OutFile $env:TEMP ( como recomendado aqui ), recebo um erro informando Access to Path is Denied (veja imagem abaixo).

As coisas que tentei não funcionaram:

  • Executou o comando no Windows Server 2008 e 2012, bem como no Windows 8.1.
  • Desmarcou as permissões da configuração Read-Only nas propriedades das pastas Temp .
  • alterei $env:TEMP para C:\ .

O erro é consistente em todos os sistemas operacionais testados.

    
por nu everest 05.03.2015 / 01:40

2 respostas

5

Parece que você está recebendo um acesso negado porque o parâmetro OutFile está tentando criar um arquivo denominado TEMP na pasta AppData / Local, mas já existe um diretório chamado TEMP para que haja um conflito de nomes. Recebi o mesmo erro ao executar seu comando como está, então adicionei um nome de arquivo e funcionou. Veja abaixo:

Invoke-WebRequest http://speedtest.newark.linode.com/100MB-newark.bin -OutFile $env:TEMP0MB-newark.bin
    
por 17.03.2015 / 22:15
0

Seu comando funciona no meu sistema (Windows-7 SP1 x64). Executando como usuário e administrador regulares ambos trabalham ... (Parece arriscado como Administrador embora). Eu testei as versões x86 e x64 do Powershell

Algorithm             Hash                    Path
---------             ----            --------------------
SHA256    A99192624C502AF0BF635D1186AC6ECAD613F0E4A48F5BA8D47B6E261C204908    C:\Temp\scratch0MB-newark.bin

SHA1    79105A819B8A0FB67DDCDEADC8E47C7F59DB8677    C:\Temp\scratch0MB-newark.bin

MD5    5F293997D8F256F9C6880272E0773429    C:\Temp\scratch0MB-newark.bin

Aqui está a pequena função Get-Webfile que usei: Adicione ao seu $ PROFILE ou. fonte. :)

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()
}

** Talvez um Medir-Comando possa ser (mais) útil em algum lugar desse canal para fornecer velocidade.

    
por 05.03.2015 / 05:57