Powershell 到 7z 加密文件夹

Powershell to 7z a folder with encryption

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

if (-not (test-path "$env:ProgramFiles-Zipz.exe")) {throw "$env:ProgramFiles-Zipz.exe needed"} 
set-alias sz "$env:ProgramFiles-Zipz.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 文件。

谁能告诉我哪里做错了?

我会尝试以下方法

if (-not (test-path "$env:ProgramFiles-Zipz.exe")) {throw "$env:ProgramFiles-Zipz.exe needed"} 
$sz = ("$env:ProgramFiles-Zipz.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

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

if (-not (test-path "$env:ProgramFiles-Zipz.exe")) {throw "$env:ProgramFiles-Zipz.exe needed"} 
set-alias sz "$env:ProgramFiles-Zipz.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)

-mx=0 对于 LZMA2 意味着 64KB 字典、32 个快速字节、HC4 匹配查找器和 BCJ 过滤器 我在这里使用它,因为大多数原生 .bak 文件已经被压缩

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

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