データベースから取得したCSVファイルを暗号化パスワード付のzip圧縮にしたい。
しかし、標準の.NETのライブラリーにはzip圧縮をするライブラリーは存在するが、
暗号化パスワードを設定するようなライブラリーは無い。
DotNetZipというライブラリーを使う手もあるが、ライブラリーを取得して自分自身がいるフォルダーに転がして…等と7-zipのコマンドラインツールを使うのと手間が変わらない。
7-zipを使ってPowerShellでzip圧縮してみる。
##フォルダー構成
CSVMAILTRANSFERというフォルダに7zipのコマンドラインツールを取得。
zip解凍しフォルダ丸ごと入れておく
下記のようなフォルダー構成にしておきます。
compress.ps1は、これから作成するPowerShellスクリプトです。
outfileフォルダはzip圧縮したファイルの出力先であり、
csvのデータが入っているフォルダ―です。
C:\CSVMAILTRANSFER
│ compress.ps1
│
├─7za 7zipのコマンドラインツールの入ったフォルダ
│ 7-zip.chm
│ 7za.exe
│ license.txt
│ readme.txt
│
└─output zip圧縮ファイル出力先と圧縮したいファイルがある場所
sales.csv
##ソースコード
<#
compress.ps1
7zipのコマンドラインを使って
暗号化パスワード付zip圧縮ファイルを作成
#>
# 圧縮するファイル
$source="\output\sales.csv"
#圧縮先のファイル名
$dist="\output\sales.zip"
## 7-Zipの場所を指定
# スクリプトファイルのパスを取得
$path=Split-Path ( & { $myInvocation.ScriptName } ) -parent
$7zip=$path+"\7za\7za.exe"
# 圧縮ファイルのフルパス取得
$source=$path+$source
$dist=$path+$dist
# 7-Zipのコマンドライン引数を生成
$Arg=" a -mem=AES256 -pPassword "+$dist+" "+$source
# 7-zipで圧縮
Start-Process $7zip -Verb runas -ArgumentList $Arg
##解説
7zipをコマンドラインで操作するのと同じことをPowerShell上で実行している。
Start-Processを使い7zipの実行ファイルを呼び出し、引数を貰い圧縮処理を行っている。
##参考サイト
コマンドでZIPや7zにパスワードを付ける