在 Azure 自动化中解压缩 .7z 文件

Unzipping a .7z file in Azure Automation

我可以在 Powershell ISE(工作流)中成功解压缩 .7z,但是当我在 Azure 运行book 中使用相同的代码时,没有任何反应:

workflow Unzip-File
{
    Param([Parameter(mandatory=$true)][String]$zipFileSource,
          [Parameter(mandatory=$true)][String]$destinationFolder,
          [Parameter(mandatory=$true)][String]$password,
          [Parameter(mandatory=$true)][String]$pathTo7zipExe)

    InlineScript
    {
        Write-Output "${using:zipFileSource} exists? - $(Test-Path ${using:zipFileSource})"
        Write-Output "${using:destinationFolder} exists? - $(Test-Path ${using:destinationFolder})"
        Write-Output "${using:pathTo7zipExe} exists? - $(Test-Path ${using:pathTo7zipExe})"
        $passwordSwitch = "-p" #this is needed because otherwise the password is literally $password rather than the string stored in that variable.
        $destinationDirSwitch = "-o"
        & ${using:pathTo7zipExe} x ${using:zipFileSource}$destinationDirSwitch${using:destinationFolder}$passwordSwitch${using:password} -y #-y means if prompted for yes/no, choose yes automatically.

        $fileName = "test.txt"
        $destinationPath = [System.IO.Path]::Combine(${using:destinationFolder}, $fileName)
        Write-Output "$destinationPath exists? - $(Test-Path $destinationPath)"
    }
}

调用 运行本书:

Unzip-File `
        -destinationFolder C:\Temp `
        -Password "ThePassword" `
        -pathTo7zipExe 'C:\Tempza.exe' `
        -zipFileSource 'C:\Temp\test.7z'

输出:

C:\Temp\test.7z exists? - True
c:\temp exists? - True
C:\Tempza.exe exists? - True
c:\temp\test.txt exists? - False

如您所见,.7z (test.txt) 中包含的文件未被提取。

这些文件位于自动化主机的 C:\Temp 文件夹中(我从 blob 存储中将它们下载到那里)。我仔细检查了密码是否与用于压缩 .7z 文件的密码相同。 test.7z 文件包含一个名为 test.txt 的文件。 7za.exe 是 7zip 的可移植 exe,在 Powershell ISE 中 运行 时工作正常。

结果证明您不能 运行 自动化主机上的 .exe 文件。我下载了 SevenZipSharp 并将 .dll 文件从 blob 存储下载到自动化主机的 C:\Temp 中,然后使用 Add-Type 导入程序集,然后 运行 从那里获取代码。