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

问题描述 投票:0回答:2

我开始使用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文件。

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

powershell 7zip
2个回答
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

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

© www.soinside.com 2019 - 2024. All rights reserved.