Help us understand the problem. What is going on with this article?

PowerShellでWebサイトの更新チェックを行う

More than 3 years have passed since last update.

はじめに

利用しているWebサービスのメンテナンス情報をチェックしたい!!
でも、専用のWeb APIもなけりゃRSSも提供されていない。
毎日確認しに行くのはかったるいし、絶対忘れる。
そんな作業を自動化するために、PowerShellで自動化スクリプトを作成しました。

やりたいこと

  1. 所定のWebサイトのソースを取得する。
  2. 前回実施した結果と比較する。
  3. 違っていた場合はメッセージ通知。

環境

  • Windows7
  • Internet Explorer11
  • PowerShell2.0

PowerShellコード

sample.ps1
# Webサイトソース保存先
$OUTPUT_DIR = Split-Path -Parent $MyInvocation.MyCommand.Path
$CURRENT_FILE = $OUTPUT_DIR + "\current-website.txt"
$BEFORE_FILE = $OUTPUT_DIR + "\before-website.txt"

# 前回実行したファイルが存在する場合、コピーする
if (Test-Path $CURRENT_FILE) {
    copy $CURRENT_FILE $BEFORE_FILE
}

# Webサイト情報取得
$wc = new-object System.Net.WebClient
$wc.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko")
$wc.Headers.Add("Accept-Language", " ja-JP")
$wc.DownloadFile("http://www.hogehoge.co.jp", $CURRENT_FILE)

# 今回と前回の差分を取得する
if ($(diff $(cat -Encoding UTF8 $CURRENT_FILE) $(cat -Encoding UTF8 $BEFORE_FILE)).Length -gt 0) {
    $wsobj = new-object -comobject wscript.shell
    $wsobj.popup("Webサイト更新あり") >$null 2>&1
    exit 1
} else {
    exit 0
}

解説

if (Test-Path $CURRENT_FILE) {
    copy $CURRENT_FILE $BEFORE_FILE
}

ファイルが存在するかどうかのチェックは、Test-Pathコマンドレットを利用します。
引数のファイル(ディレクトリでも可)が存在した場合、Trueが返ります。
存在しない場合は、Falseです。

$wc = new-object System.Net.WebClient
$wc.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko")
$wc.Headers.Add("Accept-Language", " ja-JP")
$wc.DownloadFile("http://www.hogehoge.co.jp", $CURRENT_FILE)

WebClient.DownloadFile メソッドを利用して、ファイルをダウンロードします。
第一引数は、ダウンロード元URL
第二引数は、保存先パス
を指定します。
WebClient.Headers.Addメソッドを利用することでHTTPリクエストヘッダにパラメータを追加することが出来ます。

if ($(diff $(cat -Encoding UTF8 $CURRENT_FILE) $(cat -Encoding UTF8 $BEFORE_FILE)).Length -gt 0) {

前回ダウンロード結果と今回ダウンロード結果をDIFF比較しています。
DIFF結果の文字列長が0より大きい場合は差異があると判断しています。
もう少しいい方法がありそうな予感…

$wsobj = new-object -comobject wscript.shell
$wsobj.popup("Webサイト更新あり") >$null 2>&1

wscript.sheel.popupはボタン押下結果を標準出力するため、nullに捨てています。

おわりに

Webサイト更新があった場合にポップアップを表示していますが、その後ブラウザを起動してWebサイトを表示するように修正しました。
PowerShell楽しいです(^q^)

参考サイト

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした