通过Powershell压缩多个文件\文件夹并加密zip文件密码

3

我正在尝试使用PowerShell编写一个快速脚本,用于压缩多个文件夹(或文件,现在不重要,在我的示例中是文件夹),并为每个zip文件添加随机密码,并将每个zip文件的密码导出到csv。

这是我目前的进展...

$path = "\\path\of\folders"
$source = Get-ChildItem -Path \\path\of\folders -Filter "*?" -Directory

Add-Type -assembly "system.io.compression.filesystem"

Foreach ($s in $source){
    $destination = Join-path -path $path -ChildPath "$($s.name).zip"

    If(Test-path $destination) {Remove-item $destination}

    [io.compression.zipfile]::CreateFromDirectory($s.fullname, $destination)
}

通过这种方法,我能够将主文件夹中的每个文件夹压缩成一个zip文件,并以其名称命名。

但是,我遇到的问题是如何为每个zip文件添加随机密码...然后我只需添加| Export-Csv -Path \to\my\path\passwords.csv (除非我的这个导出有误)

对此有什么想法吗?

谢谢!


1
我认为7zip比io.compression更适合这个问题的解决方案。 - Karolina Ochlik
2
据我所知,使用.Net无法创建带密码的zip文件。您可以查看7zip。其命令行版本具有一个参数“-p”,可用于压缩并设置密码。 - Theo
好的,我现在已经解决了那个问题,但是我仍然在苦恼如何生成随机密码...有什么方法吗?我正在尝试为每个人创建一个随机生成的密码,然后将其导出到CSV文件。 - Vlad Belo
好的,看起来我成功了。 虽然还有一些导出所有内容到CSV文件的问题,但我已经找到了一些解决方法。 - Vlad Belo
2个回答

1

我成功编写了一个脚本,可以压缩并加密zip文件。

 if (-not (Test-Path "C:\Program Files\7-Zip\7z.exe")){
    Write-Warning "C:\Program Files\7-Zip\7z.exe needed"
}

Add-Type -AssemblyName System.Web
$7z = ("C:\Program Files\7-Zip\7z.exe")

foreach($subfolder in (Get-ChildItem "\\path_of_directoris" -Directory))
{
    $pass =  [System.Web.Security.Membership]::GeneratePassword(10,2) 
    $Source    = $subfolder.fullname 
    $Target    = "\\path_of_directoris\$($subfolder.name).zip"
    & $7z "a" "-mx=9" "$Target" "$Source" "-p$pass" | Export-CSV -Path "\\path_to_store_pass\passwords.csv"
    echo $subfolder, $pass
}
 

0

一种选择是将存档和加密视为独立操作。7z/winzip等在过去曾出现过加密问题和其他漏洞。不过它在压缩和存档方面做得很好!

我最近发布了一个基于经过验证和证明的AxCrypt密码编码的文件加密命令行工具箱,这可能在这里运行得不错。它也可以在Windows、macOS和Linux之间移植,并且与AxCrypt桌面应用程序解密互通,有时会很有用。

请访问https://github.com/xecrets/xecrets-file-cli查看,它使用GNU GPL v3进行许可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接