Использовать динамический пароль для сжатия файлов

Я создал сценарий powershell для архивирования файлов старше X месяцев в каталоге. Я хотел бы сделать пароль для каждого сжатого файла разным, но это кажется довольно сложной задачей, поскольку winrar передает мою переменную в качестве пароля вместо значения переменной. Я попытался поместить переменную в скобки, что затем просто заставляет меня запрашивать пароль. Также пытались поместить его в кавычки, но он все равно не работает и использует имя переменной в качестве пароля. Я попробовал это на последней версии powershell, используя кавычки, которые, похоже, работают, но проблема в том, что машина, на которой я хочу запустить это, не может быть обновлена ​​в настоящее время из-за требований к доступности сервера, поэтому перезапуск сервера не вариант

$SourcePath  = "C:\FTP\Hollard\PrankCall"
$MonthsBack  = 6
$masterPassword = "Password"

$RarApp      = "C:\Program Files\WinRAR\Rar.exe"
$Source      = Get-ChildItem $SourcePath -Recurse | where {($_.LastWriteTime -LT $(Get-Date).AddMonths(-$MonthsBack)) -and ($_.Directory.Name -notmatch "Archive")}

ForEach ($files in $Source) {
$Destination    = [System.String]::Concat($files.Directory, "\Archive\")
$FileYear   = $files.LastWriteTime.year
$FileMonth = [System.String]::Concat("0",$files.LastWriteTime.Month)
$FileMonth = $FileMonth.Substring($FileMonth.Length - 2,2)
$ZipFileName = [System.String]::Concat($files.Directory.Name,"_",$FileYear , $FileMonth,".rar")
$zipFilePassword = [System.String]::Concat($masterPassword , $FileYear , $FileMonth)

if(!(Test-Path -Path $Destination )){
    New-Item -ItemType directory -Path $Destination
    }

& $RarApp a $($Destination + $ZipFileName) $($files.FullName) -m0 -hp$zipFilePassword -df -ep
}

person SimonnD    schedule 02.05.2018    source источник


Ответы (1)


Попробуй это:

& $RarApp a $($Destination + $ZipFileName) $($files.FullName) -m0 "-hp$zipFilePassword" -df -ep

Проблема в том, что синтаксический анализатор PowerShell считает, что параметры, которые вы пытаетесь передать rar.exe, могут быть параметрами для команды ScriptBlock или PowerShell, поэтому он считает, что есть параметр-переключатель с буквальным именем -hp$zipFilePassword, поэтому он не раскрывает его.

person Bacon Bits    schedule 02.05.2018