【7-Zip使用】PowerShellスクリプトでパスワード付きZIPファイルを作成する方法

  • デル株式会社

  • PowerShellでパスワード付きzipを定期的に作成することになったので作成。

    以下のPowerShellスクリプトを使用して、指定されたフォルダまたはファイルをパスワード付きZIPファイルに圧縮する方法について説明します。
    このスクリプトは、7-Zipを使用してZIPファイルを作成し、処理の結果を表示します。

    スクリプトの概要

    まず、スクリプトの全体像を示します。次に、各部分の詳細な説明を行います。

    
    Param (
        [string]$sourcePath,
        [string]$zipFilePath
    )
    
    # 7-Zipのインストールパス
    $sevenZipPath = "C:\Program Files\7-Zip\7z.exe"
    
    # ZIPファイルに設定するパスワード
    $password = "XXX_XXX"
    
    # 7-Zipを使用してパスワード付きZIPファイルを作成
    $process = Start-Process -FilePath $sevenZipPath `
                             -ArgumentList @("a", "-tzip", $zipFilePath, $sourcePath, "-p$password") `
                             -NoNewWindow -Wait -PassThru
                             
    # 終了コードの確認
    if ($process.ExitCode -ne 0) {
        Write-Host "処理結果  :失敗 終了コード:$process.ExitCode"
        Write-Host "実行終了時間:" (Get-Date).ToString("yyyy.MM.dd HH.mm.ss")
        exit $process.ExitCode
    } else {
        Write-Host "処理結果  :成功"
        Write-Host "実行終了時間:" (Get-Date).ToString("yyyy.MM.dd HH.mm.ss")
        exit 0
    }
    
    

    パラメータの定義

    このPowerShellスクリプトの引数です。
    スクリプトは2つのパラメータを受け取ります。

    ※余談ですが、スクリプトで引数を受け取る場合、必ず先頭に記載します。
     PowerShellは、上から実行されるためです。

    Param (
        [string]$sourcePath,
        [string]$zipFilePath
    )
    
    
  • $sourcePath: 圧縮したいフォルダまたはファイルのパスを指定します。
  • $zipFilePath: 出力するZIPファイルのパスを指定します。

    7-Zipのインストールパスの設定

    7-Zipのインストールパスを設定します。


    このパスは、7-Zipがインストールされている場所に依存します。
    通常は、「C:\Program Files\7-Zip\7z.exe」です。
    
    $sevenZipPath = "C:\Program Files\7-Zip\7z.exe"
    
    

    ZIPファイルに設定するパスワードの定義

    パスワード付きZIPファイルを作成するために、パスワードを設定します。


    パスワードもスクリプトの引数にすればもっと便利。
    今回は固定。
    $password = "XXX_XXX"
    

    7-Zipを使用してパスワード付きZIPファイルを作成

    「Start-Process」コマンドレットを使用して7-Zipを実行し、指定されたフォルダまたはファイルを圧縮します。
    「-ArgumentList」 パラメータを使用して7-Zipに引数を渡します。

    MSリファレンス:Start-Process


    ここ、本体部分
    $process = Start-Process -FilePath $sevenZipPath `
                             -ArgumentList @("a", "-tzip", $zipFilePath, $sourcePath, "-p$password") `
                             -NoNewWindow -Wait -PassThru
    
    
  • a: 追加(圧縮)コマンド
  • -tzip: ZIP形式で圧縮
  • $zipFilePath: 出力するZIPファイルのパス
  • $sourcePath: 圧縮するフォルダまたはファイルのパス
  • -p$password: ZIPファイルに設定するパスワード
  • 終了コードの確認

    圧縮処理の終了コードを確認し、処理が成功したか失敗したかを表示します。
    終了コードに基づいてスクリプトを終了します。

    
    if ($process.ExitCode -ne 0) {
        Write-Host "処理結果  :失敗 終了コード:$process.ExitCode"
        Write-Host "実行終了時間:" (Get-Date).ToString("yyyy.MM.dd HH.mm.ss")
        exit $process.ExitCode
    } else {
        Write-Host "処理結果  :成功"
        Write-Host "実行終了時間:" (Get-Date).ToString("yyyy.MM.dd HH.mm.ss")
        exit 0
    }
    
    # exit でスクリプトの終了コードを呼び出し元に返却する。
    
    

    $process.ExitCode: 7-Zipの終了コード
    0: 正常終了
    1: 警告
    2: エラー
    7: コマンドラインエラー
    8: メモリエラー
    255: ユーザー停止

    スクリプトの呼び出し方

    1.スクリプトをファイルに保存します。例えば、CreateZip.ps1 という名前で保存します。
    2.PowerShellを管理者権限で開きます。
    3.スクリプトを実行します。以下のコマンドを入力します。

    
    .\CreateZip.ps1 -sourcePath "C:\path\to\source\folder" -zipFilePath "C:\path\to\output\file.zip"
    
    
  • .\CreateZip.ps1: スクリプトファイルのパス
  • -sourcePath “C:\path\to\source\folder”: 圧縮するフォルダまたはファイルのパス
  • -zipFilePath “C:\path\to\output\file.zip”: 出力するZIPファイルのパス

    実行例

    
    .\CreateZip.ps1 -sourcePath "C:\Users\YourUsername\Documents\MyFolder" -zipFilePath "C:\Users\YourUsername\Documents\MyFolder.zip"
    
    

    上記、実行により、
    C:\Users\YourUsername\Documents\MyFolder フォルダがパスワード付きのZIPファイルとして、
    C:\Users\YourUsername\Documents\MyFolder.zip に圧縮されます。

    注意点


    実行して何かが起こっても責任とれません。
    自己責任でお願いします!

  • 関連記事

    ページ上部へ戻る