Invoke-WebRequest访问路径被拒绝,出现了UnauthorizedAccessException。

我正在以管理员身份在Windows Powershell中运行一个Invoke-WebRequest。
当我运行以下命令:Invoke-WebRequest http://speedtest.newark.linode.com/100MB-newark.bin -OutFile $env:TEMP如此处所推荐),我收到一个错误,提示访问路径被拒绝(见下图)。

enter image description here

我尝试过但没有成功的方法:
  • 在Windows Server 2008和2012以及Windows 8.1上运行命令。
  • 取消Temp文件夹属性下的只读权限设置。
  • $env:TEMP更改为C:\

这个错误在所有测试的操作系统中都是一致的。

2个回答

看起来你遇到了访问被拒绝的问题,因为OutFile参数试图在AppData/Local文件夹中创建一个名为TEMP的文件,但已经有一个名为TEMP的目录,所以存在命名冲突。我按照原样运行了你的命令,也遇到了同样的错误,然后我添加了一个文件名,它就正常工作了。请参考下面的示例:
Invoke-WebRequest http://speedtest.newark.linode.com/100MB-newark.bin -OutFile $env:TEMP\100MB-newark.bin

你的命令在我的系统上运行正常(Windows-7 SP1 x64)。作为普通用户和管理员都可以运行...(不过作为管理员可能有风险)。我测试了Powershell的x86和x64版本。
算法 哈希值 路径 --------- ---- -------------------- 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或者. source它。 :)
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”命令放在哪里? - nu everest

  • 相关问题