web-dev-qa-db-ja.com

パスへのInvoke-WebRequestアクセスが拒否される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-OnlyTempフォルダのプロパティで権限を設定します。
  • 私が変更され $env:TEMPからC:\

エラーは、テストしたすべてのオペレーティングシステムで一貫しています。

5
nu everest

OutFileパラメーターがTEMPという名前のファイルをAppData/Localフォルダーに作成しようとしているが、すでにTEMPという名前のディレクトリがあり、名前の競合があるため、アクセスが拒否されているようです。コマンドの実行中に同じエラーが発生したので、ファイル名を追加すると機能しました。下記参照:

Invoke-WebRequest http://speedtest.newark.linode.com/100MB-newark.bin -OutFile $env:TEMP\100MB-newark.bin
7

あなたのコマンドは私のシステム(Windows-7 SP1 x64)で動作します。通常のユーザーおよび管理者として実行すると、どちらも機能します...(ただし、管理者としてはリスクが高いようです)。 Powershellのx86バージョンとx64バージョンの両方をテストしました

アルゴリズムハッシュパス
 --------- ---- -------------------- 
 SHA256 A99192624C502AF0BF635D1186AC6ECAD613F0E4A48F5BA8D47B6E261C204908 C:\ Temp\scratch\100MB-newark.bin 
 
 SHA1 79105A819B8A0FB67DDCDEADC8E.MB.MB.MB.MB.MB.Cmp\.bin [MB_C。\ In_C。\ In_C。\ In_C。\ In_C。\\ [C] \\。\ [C] \\ [\] 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-Commandは、そのパイプラインのどこかで(さらに)速度を提供するのに役立ちます。

0