使用 Powershell 提取受密码保护的 7z 文件

问题描述 投票:0回答:1

我正在尝试提取一堆 7z 文件。

我能够从其他 Stackoverflow 帖子中获取这两套 Powershell 脚本,但它们似乎都不起作用。

$7ZipPath = '"C:\Program Files\7-Zip\7z.exe"'
$zipFile = '"F:\NHSFTP\WH_20240803_1.7z"'
$zipFilePassword = "xYxYxYx"
$command = "& $7ZipPath e -oe:\ -y -tzip -p$zipFilePassword $zipFile"
iex $command


$7ZipPath = '"C:\Program Files\7-Zip\7z.exe"'
$zipFile = '"F:\NHSFTP\WH_20240803_1.7z"'
$zipFilePassword = "xYxYxYx"
$command = "& $7ZipPath e -oW:\ADMINISTRATION -y -tzip -p$zipFilePassword $zipFile"
iex $command

我错过了什么?

我还尝试打开多个 7z 文件,而不仅仅是一个。

我会表达这样的话吗?

$zipFile = '"F:\NHSFTP\*.7z"'

更新

这是我需要运行的(更新的脚本)吗?

$7ZipPath = 'C:\Program Files\7-Zip\7z.exe'
$zipFile = 'F:\NHSFTP\WH_20240803_1.7z'
$zipFilePassword = 'xYxYxYx'
& $7ZipPath e -oe:\ -y -tzip -p$zipFilePassword $zipFile
powershell extract 7zip
1个回答
2
投票

这里没有理由使用

Invoke-Expression
,我建议创建一个稍后可以轻松重用的函数。 7zip 还能够检测压缩算法,因此您可以删除
-tzip
作为参数。

function Expand-7zip {
    [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(
        'PSAvoidUsingPlainTextForPassword', '')]
    param(
        [Parameter(Mandatory, ValueFromPipelineByPropertyName)]
        [Alias('FullName')]
        [string] $Path,

        [Parameter()]
        [string] $OutputPath,

        [Parameter()]
        [string] $Password
    )

    process {
        $params = @(
            'e'
            if ($OutputPath) {
                '-o' + $PSCmdlet.GetUnresolvedProviderPathFromPSPath($OutputPath)
            }
            '-y'
            if ($Password) {
                '-p' + $Password
            }
            $PSCmdlet.GetUnresolvedProviderPathFromPSPath($Path)
        )

        & 'C:\Program Files\7-Zip\7z.exe' @params
    }
}

然后你可以像这样使用它:

Expand-7zip F:\NHSFTP\WH_20240803_1.7z -OutputPath E:\ -Password xYxYxYx

为了提取多个文件,您可以将输出从

Get-ChildItem
通过管道传送到此函数(考虑在本示例中所有文件都具有相同的密码):

Get-ChildItem F:\NHSFTP\ -Filter *.7z | Expand-7zip -Password xxxxx
© www.soinside.com 2019 - 2024. All rights reserved.