先日、保守作業で使用するバッチの作成を依頼された。最初はDOSコマンドでできるかと思っていたが、調べていくうちにPowershellで実現する方法が見えてきたので、挑戦する事にした。
以下、その備忘録である。
【バッチの目的】
1.目的
会社に設置しているファイルサーバーの共有親フォルダ配下にあるフォルダ数、ファイル数と容量を取得する。
2.ファイルサーバーの構成
ファイルサーバーは3台あり、共有フォルダの親フォルダは以下の通り。
¥¥aaa¥project
¥¥bbb¥share
¥¥ccc¥backup
3.保存先
フォルダ数、ファイル数と容量はテキストファイルに出力する。
Powershellを使用するのは初めてだったので、最初はなかなかうまく行かなかった。Google先生に質問しながら試行錯誤して何とか実装できた。
【バッチの仕様】
1.調査対象のフォルダパスは絶対パスで表記する。
2.調査対象のフォルダパスは外部の一覧テキスト(c:¥file_pass.txt)から取得する。
3.調査結果はテキストファイルに出力する。
【バッチの中身】
check_file.ps1
#ナンバリングの為の変数を宣言する
$i = 1
#日時を取得する
$date = date
#フォルダパスをc:¥file_pass.txtから文字列として取得する
$pass = (get-content c:¥file_pass.txt) -as [string ]
#上記で読み込んだ内容を一行ずつ処理する
foreach ( $line in $pass) {
"日時$date" >> c:¥result.txt
"対象フォルダ$i : $line" >> c:¥result.txt
#ファイル数とフォルダの合計サイズを追記する
"ファイル数とフォルダの合計サイズ" >> c:¥result.txt
get-childitem $line -r -force | measure-object -property Length -sum >> c:¥result.txt
#ファイルとフォルダの合計数を追記する
"ファイルとフォルダの合計数" >> c:¥result.txt
get-childitem $line -r -force | measure-object -property Name >> c:¥result.txt
#ナンバリングを加算する
$i ++
}
【各コマンドのメモ】
・get-childitem
カレントフォルダ配下のファイル一覧を出力する。
・-r
-recurseの省略形、カレントフォルダ配下のフォルダを再帰的に出力するオプション。
・-force
隠しファイル、隠しフォルダも出力するオプション。
・measure-object
出力された項目を数える。
・-property
オプション
・Length
get-childitemで出力されたバイト数(Length)を指す。
・-sum
合計するオプション。
・Name
get-childitemで出力されたファイル/フォルダ名(Name)を指す。
・date
日付を表示する。
・get-content
指定されたパスのファイルを読み込む。
・-as [string ]
読み込んだファイルの内容をstring型で配列に入れる。
・foreach ( $line in $pass)
読み込んだファイルを一行ずつ処理する
・>> filename
filenameに結果を追記する。
【参考にしたサイト】
久しぶりにコードを書いた。サーバー・ネットワーク構築でもそうだが、思い通りに動いた時はとても嬉しいし、そういう時にこの仕事が楽しいと感じる。