我开始使用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文件。
有谁能告诉我我做错了什么?
答案 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)
-mx=0
表示64KB字典,32个fastbytes,HC4 matchfinder和BCJ过滤器
我在这里使用它,因为大多数本机.bak文件已经被压缩
mhe=on
启用标头加密(更多7z方法here)
Out-Null
隐藏输出,而不是将其发送到管道或显示输出(更多here)