今回も前回に続き PowerShell v5 をコアとする Windows Management Framework 5.0 Preview September 2014 (v5.0) の機能詳細を触りつつ、何が変わるのかお伝えできればと思います。
- Manage .ZIP files with new cmdlets
つまり、 Zip ファイルが標準で扱えるようになります。Windows ようやくここまで来たか感ですね。
- 過去の記事はこちら
目次
Cmdlet
対象のCmdlet は2つです。
CommandType Name Version Source ----------- ---- ------- ------ Function Compress-Archive 1.0.0.0 Microsoft.PowerShell.Archive Function Expand-Archive 1.0.0.0 Microsoft.PowerShell.Archive
Compress-Archive
圧縮を行います。
NAME Compress-Archive SYNOPSIS The Compress-Archive cmdlet can be used to zip/compress one or more files/directories. SYNTAX Compress-Archive [-Path] <String[]> [-DestinationPath] <String> [-CompressionLevel <String>] [-Update] [-WhatIf] [- Confirm] [<CommonParameters>] Compress-Archive -LiteralPath <String[]> [-DestinationPath] <String> [-CompressionLevel <String>] [-Update] [-WhatI f] [-Confirm] [<CommonParameters>] DESCRIPTION PARAMETERS -Path <String[]> Required? true Position? 1 Default value Accept pipeline input? true (ByValue, ByPropertyName) Accept wildcard characters? false -LiteralPath <String[]> Required? true Position? named Default value Accept pipeline input? true (ByPropertyName) Accept wildcard characters? false -DestinationPath <String> Required? true Position? 2 Default value Accept pipeline input? false Accept wildcard characters? false -CompressionLevel <String> Required? false Position? named Default value Optimal Accept pipeline input? false Accept wildcard characters? false -Update [<SwitchParameter>] Required? false Position? named Default value False Accept pipeline input? false Accept wildcard characters? false -WhatIf [<SwitchParameter>] Required? false Position? named Default value Accept pipeline input? false Accept wildcard characters? false -Confirm [<SwitchParameter>] Required? false Position? named Default value Accept pipeline input? false Accept wildcard characters? false <CommonParameters> This cmdlet supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction, WarningVariable, OutBuffer, PipelineVariable, and OutVariable. For more information, see about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216). INPUTS OUTPUTS RELATED LINKS
ファイル圧縮
例えば、 D:\hoge.log を d:\hoge.zip に圧縮したいなら?
Compress-Archive -Path D:\hoge.log -DestinationPath d:\hoge.zip
生成されました。
Directory: D:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2014/09/08 5:10 213260 hoge.zip
中身を見てみましょう。
フォルダ圧縮
フォルダの圧縮を行ってみましょう。
例えば、 D:\Github\valentia\Valentai を d:\valentia.zip に圧縮してみましょう。
こんな構造です。
実行してみましょう。ファイルと変わりません。判定は自動的に行ってくれます。
Compress-Archive -Path D:\GitHub\valentia\valentia -DestinationPath D:\valentia.zip
サイズがそれなりだったので、実行するとプログレスバーが出ました。
生成されたzip を見てみると、指定したパスの構造そのままにできている?
と思いきや、Lhaz など 3rdパーティソフトで見ると、フォルダがファイルになっていたりして構造が壊れています。
一方で、Windows 標準のExplorer なら平気です。
んー、微妙なので Connect にはあげませんでしたが、どうしたものか。
条件は容易で、「ファイルを含まないフォルダが存在していると、ルートのフォルダがファイルに変わります。」
再現コードです。
# Reproduce mkdir d:\hoge\hoge\1\2\3\4 mkdir d:\hoge\hoge\1\2\3\5 New-Item d:\hoge\hoge\log.log New-Item d:\hoge\hoge\1\2\3\3.log New-Item d:\hoge\hoge\1\2\3\4\4.log Compress-Archive d:\hoge\hoge -DestinationPath d:\hoge.zip
基本的に、 Windows 標準のExplorer は逆に他で利用できない Zip を生成するので、 Lhaz や WinRAR などはその辺安定しているので微妙ですね。
解凍
解凍も簡単です。Expand-Archive
使います。
Compress-Archive に対して、Expland-Archive はうまく解凍してくれるのですばらです。
例えば、c:\に解凍するならこうです。
Expand-Archive -Path d:\valentia.zip -DestinationPath c:\
Zipへのアイテム追加
Compress-Archive には、 Update
スイッチがあります。
これを使うことで、既存の zipにアイテムを追加可能です。
例えば、 d:\valentia.zip に、 d:\Github\DayBreakJP フォルダを追加するならこうです。
Compress-Archive -Path D:\GitHub\DayBreakJP -DestinationPath D:\valentia.zip -Update
うまく追加されていますね!
まとめ
Zipの処理には、 DSC の Archive リソースという手段もありましたが、Cmdletでできるのはうれしいですね!