0

問題: サイトのソース コードをダウンロードし、すべてのファイル ターゲットを見つけて、そのターゲットをダウンロードする PowerShell スクリプトの作成に取り組んでいます。現時点では認証に問題はないので、テスト Web サイトでは、匿名認証を有効にし、ディレクトリ ブラウジングを有効にし、他のすべての既定のページを無効にしたため、取得できるのは自分のサイトのファイルの一覧だけです。私がこれまでに持っているのはこれです:

$source = "http://testsite/testfolder/"
$webclient = New-Object system.net.webclient
$destination = "c:/users/administrator/desktop/test/"
$webclient.downloadstring($source)

$webclient.downloadstring基本的に私のサイトのソース コードを返し、必要なファイルを残りのコードにラップすることができます。皆さんへの私の質問は、必要なリンクを分離するための最良かつ/または最も簡単な方法は何ですか? foreach コマンドを実行してそれらすべてをダウンロードできますか?

また、クレジットを追加するために、自分のサイトからフォルダーとそれらのフォルダー内のファイルをダウンロードするコードを追加するにはどうすればよいですか? 少なくとも、各サブフォルダーからファイルを取得するための個別のスクリプトを作成できますが、明らかに、すべてを 1 つのスクリプトで取得する方がはるかに優れています。

4

1 に答える 1

0

PowerShell v3 を使用している場合は、Invoke-WebRequestコマンドレットが役立つ場合があります。

Web サイトを表すオブジェクトを取得するには:

Invoke-WebRequest "http://stackoverflow.com/search?tab=newest&q=powershell"

その Web サイト内のすべてのリンクを取得するには:

Invoke-WebRequest "http://stackoverflow.com/search?tab=newest&q=powershell" | select -ExpandProperty Links

hrefそして、要素のリストを取得するには:

Invoke-WebRequest "http://stackoverflow.com/search?tab=newest&q=powershell" | select -ExpandProperty Links | select href

PowerShell v2 以前を使用している場合は、InternetExplorer.ApplicationCOM オブジェクトを作成し、それを使用してページを移動する必要があります。

$ie = new-object -com "InternetExplorer.Application"
# sleep for a second while IE launches
Start-Sleep -Seconds 1
$ie.Navigate("http://stackoverflow.com/search?tab=newest&q=powershell")
# sleep for a second while IE opens the page
Start-Sleep -Seconds 1
$ie.Document.Links | select IHTMLAnchorElement_href
# quit IE
$ie.Application.Quit()

について学んだこのブログ投稿に感謝しInvoke-WebRequestます。

更新:投稿したようにWebサイトのソースをダウンロードして、ソースからリンクを抽出することもできます. このようなもの:

$webclient.downloadstring($source) -split "<a\s+" | %{ [void]($_ -match "^href=[`'`"]([^`'`">\s]*)"); $matches[1] }

パーツは、1 つ以上のスペースが後-splitに続く行に沿ってソースを分割します。出力は配列に配置され、ブロック<aを介してパイプ処理されます。foreach-objectここでは、リンク部分を抽出して出力する正規表現の各行を照合します。

出力をさらに処理したい場合は、それを処理する別のブロックをさらにパイプすることができます。

于 2013-10-21T08:06:15.590 に答える