Powershell ISE (ワークフロー) で .7z を正常に解凍できますが、Azure Runbook で同じコードを使用しても何も起こりません:
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:\Temp\7za.exe' `
-zipFileSource 'C:\Temp\test.7z'
出力:
C:\Temp\test.7z exists? - True
c:\temp exists? - True
C:\Temp\7za.exe exists? - True
c:\temp\test.txt exists? - False
ご覧のとおり、.7z (test.txt) に含まれるファイルは抽出されていません。
ファイルは、Automation ホストの C:\Temp フォルダーにあります (BLOB ストレージからダウンロードしました)。パスワードが .7z ファイルの圧縮に使用されたものと同じであることを再確認しました。test.7z ファイルには、test.txt という名前のファイルが 1 つ含まれています。7za.exe は 7zip のポータブル exe であり、Powershell ISE で実行すると正常に動作しました。