Powershell到7z一个带加密的文件夹

时间:2015-08-14 01:03:12

标签: powershell 7zip

我开始使用Powershell,到目前为止看起来很有趣。今晚,我正在编写一个用7z压缩文件夹的脚本,并为新的.7z文件添加加密(见下文)。

if (-not (test-path "$env:ProgramFiles\7-Zip\7z.exe")) {throw "$env:ProgramFiles\7-Zip\7z.exe needed"} 
set-alias sz "$env:ProgramFiles\7-Zip\7z.exe"  

$timestamp = get-date -f yyyyMMdd
$Source = "D:\dbbackup\$timestamp-0300" 
$Target = "D:\backup\$timestamp.7z"

sz a -mx=9 $Target $Source -p1234

最终,我需要从每晚用yyyyMMdd更改的文件夹中创建一个加密的7z文件,然后是一个常数(在本例中为yyyyMMdd-0300)。使用上面的脚本,我可以运行它,并将创建一个新的7z文件。但是,密码1234将不适用。根本没有加密。

如果我遗漏$timestamp而只使用$source$target运行7z,我可以成功创建加密的7z文件。

有谁能告诉我我做错了什么?

2 个答案:

答案 0 :(得分:2)

我会尝试以下

if (-not (test-path "$env:ProgramFiles\7-Zip\7z.exe")) {throw "$env:ProgramFiles\7-Zip\7z.exe needed"} 
$sz = ("$env:ProgramFiles\7-Zip\7z.exe") 

$timestamp = get-date -f yyyyMMdd
$Source = "D:\dbbackup\$timestamp-0300" 
$Target = "D:\backup\$timestamp.7z"

Start-Process $sz -argumentList "a", "-mx=9", "$Target", "$Source", "-p1234" -Wait

答案 1 :(得分:0)

仅仅因为我花了一些时间来传递带有空格的目录,我提出类似的解决了这个问题,下面是一个如何加密.bak文件并将加密存档发送到共享位置的示例:

if (-not (test-path "$env:ProgramFiles\7-Zip\7z.exe")) {throw "$env:ProgramFiles\7-Zip\7z.exe needed"} 
set-alias sz "$env:ProgramFiles\7-Zip\7z.exe"  

$timestamp = get-date -f yyyy-MM-dd
$Source = "C:\backups ang logs\*.bak"
$Target = "\\192.168.12.345\d\DropBoxFolder\My Daily Backups $timestamp.7z"

sz a -mx=0 -pStrongPassword -mhe=on -m0=lzma2 $Target $Source | Out-Null

m0=lzma2是压缩算法(more here)

LZMA2的

-mx=0表示64KB字典,32个fastbytes,HC4 matchfinder和BCJ过滤器 我在这里使用它,因为大多数本机.bak文件已经被压缩

mhe=on启用标头加密(更多7z方法here

Out-Null隐藏输出,而不是将其发送到管道或显示输出(更多here