2015-08-14 2 views
0

Я начинаю с Powershell, и пока это кажется забавным. Сегодня я работаю над скриптом, который сжимает папку с 7z и добавляет шифрование в новый .7z-файл (см. Ниже).Powershell to 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 

В конце концов, мне нужно создать зашифрованный файл 7z из папки, которая меняется каждую ночь с YYyyMmDd, а затем следуют постоянное число (в данном случае, YYyyMmDd-0300). С помощью приведенного выше сценария я могу запустить его, и будет создан новый 7z-файл. Однако пароль 1234 не будет применяться. Шифрование вообще отсутствует.

Если я оставляю $timestamp и запускаю только 7z с $source и $target, я могу успешно создать зашифрованный 7z-файл.

Может ли кто-нибудь сказать мне, что я делаю неправильно?

+0

Первый результат по [google] (http://www.dotnetperls.com/7-zip-examples). Вы пробовали/или iex для запуска exe? – lloyd

+0

Возможно, вам придется передать '-p1234' в Powershell как' ArgumentList', см. [Здесь] (http://blogs.msdn.com/b/powershell/archive/2009/12/29/arguments-for-remote- commands.aspx) для более подробной информации. – user4317867

ответ

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

Я не мог заставить его работать с предложенным ответом, но ты указал мне в правильном направлении. Я изменил последнюю строку на & $ sz "a" "-mx = 9" "$ Target" "$ Source" "-p1234", и я смог применить ключ шифрования к своему 7z-файлу. – ken

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 означает словарь 64К, 32 Fastbytes, hc4 matchfinder и BCJ фильтр Я использовал его здесь, поскольку большинство родной .bak файлы будут сжаты уже

mhe=on включает шифрование заголовка (более 7z методы here)

Out-Null Скрывает вывод вместо отправки по трубопроводу или его отображения (подробнее here)

Смежные вопросы