LoginSignup
9
15

More than 5 years have passed since last update.

PowerShellと7zipでファイルを圧縮

Last updated at Posted at 2014-10-20

データベースから取得した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
<#
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にパスワードを付ける

Start-Process

9
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
15