经过大量实验(为了科学!),我发现7z线路没有按预期工作。在原始代码中
-p$pw
实际上将密码设置为文字
$pw
.
快速&脏方法是使用
Invoke-Expression
相反:
$inpw = Read-Host -assecurestring -Prompt 'Input Backup Master Passphrase: '
$zpw = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($inpw))
$archive = "myarchive.7z"
$src = "testfile.txt"
# using a string formatter to avoid a mess of escaping characters
Invoke-Expression ('& "{0}" a -v900M -t7z -mhe=on -mx=9 -p{1} {2} {3}' -f 'C:\Program Files\7-Zip\7z.exe', $zpw, $archive, $src)
然而,这会带来字符串插值和其他安全/数据问题的重新发行。你也可以看看
Start-Process
,或使用.NET
Process.Start
方法进行更多控制。