12

IIS Web サイトでファイルをクエリし、それらのファイルを自動的にダウンロードするスクリプトを取得しようとしています。これまでのところ、私はこれを持っています:

$webclient = New-Object System.Net.webclient
$source = "http://testsite:8005/"
$destination = "C:\users\administrator\desktop\testfolder\"
#The following line returns the links in the webpage
$testcode1 = $webclient.downloadstring($source) -split "<a\s+" | %{ [void]($_ -match "^href=['"]([^'">\s]*)"); $matches[1] }
foreach ($line in $test2) {
    $webclient.downloadfile($source + $line, $destination + $line)
}


私はまだ PowerShell が得意ではなく、エラーがいくつか発生しますが、wwwroot フォルダーに投げ込んだいくつかのテスト ファイルを取得することができます (web.config ファイルはダウンロードできないように見えるので、それが私のエラーの 1 つだと思います)。 )。$sourceいくつかのテスト テキスト ファイル (example = ) があるサイトのサブフォルダーに値を変更しようとするとhttp://testsite:8005/subfolder/、エラーが発生し、まったくダウンロードされ$testcode1ません。 my を実行すると、サブフォルダーに次のリンクが表示されます:
/subfolder/test2/txt
/
/subfolder/test1.txt
/subfolder/test2.txt
理由がわかりませんそれはtest2ファイルを2回リストします.私の問題は、それがサブフォルダー/ファイル形式を返していたので、ダウンロードしようとしたためにエラーが発生したことであると考えまし$source + $lineた.これは本質的にhttp://testsite:8005/subfolder/subfolder/test1.txt.$root私のサイトのルートディレクトリであった値とforeach($line in $testcode1) { $webclient.downloadfile($root + $line, $destination + $line) }、まだエラーが発生します。
ハイスピードの教祖の何人かが私のやり方の誤りを教えてくれるなら、私は感謝します. サイトの各サブフォルダーにあるすべてのファイルをダウンロードしようとしていますが、再帰的な操作が必要になることはわかっていますが、現在、それを行うスキル レベルがありません。私を助けてくれてありがとう!

4

4 に答える 4

4

ウェブサイトからファイルをダウンロードする最良の方法は、

Invoke-WebRequest –Uri $url

HTML を取得できたら、リンクのコンテンツを解析できます。

$result = (((Invoke-WebRequest –Uri $url).Links | Where-Object {$_.href -like “http*”} ) | select href).href

試してみる。$webclient = New-Object System.Net.webclient よりも単純です

于 2016-09-06T09:49:57.940 に答える
1

私はこれを試してみます:

$webclient = New-Object System.Net.webclient
$source = "http://testsite:8005/"
$destination = "C:\users\administrator\desktop\testfolder\"
#The following line returns the links in the webpage
$testcode1 = $webclient.downloadstring($source) -split "<a\s+" | %{ [void]($_ -match  "^href=['"]([^'">\s]*)"); $matches[1] }
foreach ($line in $testcode1) {
    $Destination = "$destination\$line"
    #Create a new directory if it doesn't exist
    if (!(Test-Path $Destination)){
        New-Item $Destination -type directory -Force
    }
    $webclient.downloadfile($source + $line, $destination + $line)
}

ここでの唯一の問題は、新しいディレクトリから新しいファイルを取得し、それをまだ存在していないフォルダーに配置していたことだと思います (私は間違っている可能性があります)。

それでも問題が解決しない場合は、追加のトラブルシューティングを行うことができます。

各行を個別に PowerShell ウィンドウにコピーし、foreach ループまで実行します。次に、すべての金を保持する変数を入力します。

    $testcode1

それをコンソールに入力すると、そこにあるものが正確に吐き出されるはずです。次に、次のような追加のトラブルシューティングを行うことができます。

    "Attempting to copy $Source$line to $Destination$line"

そして、それが完全に下にあるはずのように見えるかどうかを確認してください. 私のコードを少し調整する必要があるかもしれません。

-デール・ハリス

于 2013-10-24T20:51:24.423 に答える