元ITインフラ系エンジニアの日記

元ITインフラ系エンジニアがITのことや投資のこと、コンサルのこと等を綴ります。

Powershellでのバッチ作成

先日、保守作業で使用するバッチの作成を依頼された。最初は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に結果を追記する。

 

【参考にしたサイト】

PowerShell - Windowsと暮らす

 

www.atmarkit.co.jp

 

 久しぶりにコードを書いた。サーバー・ネットワーク構築でもそうだが、思い通りに動いた時はとても嬉しいし、そういう時にこの仕事が楽しいと感じる。