4104152150x0172075Microsoft-Windows-PowerShell/Operationalar-win-2.attackrange.local11Copy-Item -Path "C:\Windows\System32\config\SAM" -Destination "C:\Path\To\Copy\Location\SAM_copy"cfd5975e-e6a8-434b-9592-28334a1c11a9 4104132150x0146295Microsoft-Windows-PowerShell/OperationalEC2AMAZ-9JTOML512# Copyright © 2017 - 2021 Chocolatey Software, Inc. # Copyright © 2015 - 2017 RealDimensions Software, LLC # Copyright © 2011 - 2015 RealDimensions Software, LLC & original authors/contributors from https://github.com/chocolatey/chocolatey # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. function Get-ChocolateyUnzip { <# .SYNOPSIS Unzips an archive file and returns the location for further processing. .DESCRIPTION This unzips files using the 7-zip command line tool 7z.exe. Supported archive formats are listed at: https://sevenzip.osdn.jp/chm/general/formats.htm .INPUTS None .OUTPUTS Returns the passed in $destination. .NOTES If extraction fails, an exception is thrown. If you are embedding files into a package, ensure that you have the rights to redistribute those files if you are sharing this package publicly (like on the community feed). Otherwise, please use Install-ChocolateyZipPackage to download those resources from their official distribution points. Will automatically call Set-PowerShellExitCode to set the package exit code based on 7-zip's exit code. .PARAMETER FileFullPath This is the full path to the zip file. If embedding it in the package next to the install script, the path will be like `"$(Split-Path -Parent $MyInvocation.MyCommand.Definition)\\file.zip"` `File` is an alias for FileFullPath. This can be a 32-bit or 64-bit file. This is mandatory in earlier versions of Chocolatey, but optional if FileFullPath64 has been provided. .PARAMETER FileFullPath64 Full file path to a 64-bit native installer to run. If embedding in the package, you can get it to the path with `"$(Split-Path -parent $MyInvocation.MyCommand.Definition)\\INSTALLER_FILE"` Provide this when you want to provide both 32-bit and 64-bit installers or explicitly only a 64-bit installer (which will cause a package install failure on 32-bit systems). .PARAMETER Destination This is a directory where you would like the unzipped files to end up. If it does not exist, it will be created. .PARAMETER SpecificFolder OPTIONAL - This is a specific directory within zip file to extract. The folder and its contents will be extracted to the destination. .PARAMETER PackageName OPTIONAL - This will facilitate logging unzip activity for subsequent uninstalls .PARAMETER DisableLogging OPTIONAL - This disables logging of the extracted items. It speeds up extraction of archives with many files. Usage of this parameter will prevent Uninstall-ChocolateyZipPackage from working, extracted files will have to be cleaned up with Remove-Item or a similar command instead. .PARAMETER IgnoredArguments Allows splatting with arguments that do not apply. Do not use directly. .EXAMPLE > # Path to the folder where the script is executing $toolsDir = (Split-Path -parent $MyInvocation.MyCommand.Definition) Get-ChocolateyUnzip -FileFullPath "c:\someFile.zip" -Destination $toolsDir .LINK Install-ChocolateyZipPackage #> param( [alias("file")][parameter(Mandatory = $false, Position = 0)][string] $fileFullPath, [alias("unzipLocation")][parameter(Mandatory = $true, Position = 1)][string] $destination, [parameter(Mandatory = $false, Position = 2)][string] $specificFolder, [parameter(Mandatory = $false, Position = 3)][string] $packageName, [alias("file64")][parameter(Mandatory = $false)][string] $fileFullPath64, [parameter(Mandatory = $false)][switch] $disableLogging, [parameter(ValueFromRemainingArguments = $true)][Object[]] $ignoredArguments ) Write-FunctionCallLogMessage -Invocation $MyInvocation -Parameters $PSBoundParameters $bitnessMessage = '' $zipfileFullPath = $fileFullPath if ((Get-OSArchitectureWidth 32) -or $env:ChocolateyForceX86 -eq 'true') { if (!$fileFullPath) { throw "32-bit archive is not supported for $packageName"; } if ($fileFullPath64) { $bitnessMessage = '32-bit '; } } elseif ($fileFullPath64) { $zipfileFullPath = $fileFullPath64 $bitnessMessage = '64-bit ' } if ($zipfileFullPath -eq '' -or $zipfileFullPath -eq $null) { throw 'Package parameters incorrect, either FileFullPath or FileFullPath64 must be specified.' } if ($packageName) { $packagelibPath = $env:ChocolateyPackageFolder if (!(Test-Path -Path $packagelibPath)) { New-Item $packagelibPath -type directory } $zipFilename = Split-Path $zipfileFullPath -Leaf $zipExtractLogFullPath = Join-Path $packagelibPath $zipFilename`.txt } if ($env:chocolateyPackageName -ne $null -and $env:chocolateyPackageName -eq $env:ChocolateyInstallDirectoryPackage) { Write-Warning "Install Directory override not available for zip packages at this time.`n If this package also runs a native installer using Chocolatey`n functions, the directory will be honored." } Write-Host "Extracting $bitnessMessage$zipfileFullPath to $destination..." if (![System.IO.Directory]::Exists($destination)) { [System.IO.Directory]::CreateDirectory($destination) | Out-Null } $7zip = Join-Path "$helpersPath" '..\tools\7z.exe' if (!([System.IO.File]::Exists($7zip))) { Update-SessionEnvironment $7zip = Join-Path "$env:ChocolateyInstall" 'tools\7z.exe' } $7zip = [System.IO.Path]::GetFullPath($7zip) Write-Debug "7zip found at `'$7zip`'" # 32-bit 7z would not find C:\Windows\System32\config\systemprofile\AppData\Local\Temp, # because it gets translated to C:\Windows\SysWOW64\... by the WOW redirection layer. # Replace System32 with sysnative, which does not get redirected. # 32-bit 7z is required so it can see both architectures if ([IntPtr]::Size -ne 4) { $fileFullPathNoRedirection = $zipfileFullPath -ireplace ([System.Text.RegularExpressions.Regex]::Escape([Environment]::GetFolderPath('System'))), (Join-Path $Env:SystemRoot 'SysNative') $destinationNoRedirection = $destination -ireplace ([System.Text.RegularExpressions.Regex]::Escape([Environment]::GetFolderPath('System'))), (Join-Path $Env:SystemRoot 'SysNative') } else { $fileFullPathNoRedirection = $zipfileFullPath $destinationNoRedirection = $destination } $workingDirectory = $(Get-Location -PSProvider 'FileSystem') if ($workingDirectory -eq $null -or $workingDirectory.ProviderPath -eq $null) { Write-Debug "Unable to use current location for Working Directory. Using Cache Location instead." $workingDirectory = $env:TEMP } $workingDirectory = $workingDirectory.ProviderPath $loggingParam = '-bb1' if ($disableLogging) { $loggingParam = '-bb0' } $params = "x -aoa -bd $loggingParam -o`"$destinationNoRedirection`" -y `"$fileFullPathNoRedirection`"" if ($specificfolder) { $params += " `"$specificfolder`"" } Write-Debug "Executing command ['$7zip' $params]" # Capture 7z's output into a StringBuilder and write it out in blocks, to improve I/O performance. $global:zipFileList = New-Object System.Text.StringBuilder $global:zipDestinationFolder = $destination # Redirecting output slows things down a bit. $writeOutput = { if ($EventArgs.Data -ne $null) { $line = $EventArgs.Data Write-Verbose "$line" if ($line.StartsWith("- ")) { $global:zipFileList.AppendLine($global:zipDestinationFolder + "\" + $line.Substring(2)) } } } $writeError = { if ($EventArgs.Data -ne $null) { Write-Error "$($EventArgs.Data)" } } $process = New-Object System.Diagnostics.Process $process.EnableRaisingEvents = $true Register-ObjectEvent -InputObject $process -SourceIdentifier "LogOutput_ChocolateyZipProc" -EventName OutputDataReceived -Action $writeOutput | Out-Null Register-ObjectEvent -InputObject $process -SourceIdentifier "LogErrors_ChocolateyZipProc" -EventName ErrorDataReceived -Action $writeError | Out-Null $process.StartInfo = New-Object System.Diagnostics.ProcessStartInfo($7zip, $params) $process.StartInfo.RedirectStandardOutput = $true $process.StartInfo.RedirectStandardError = $true $process.StartInfo.UseShellExecute = $false $process.StartInfo.WorkingDirectory = $workingDirectory $process.StartInfo.WindowStyle = [System.Diagnostics.ProcessWindowStyle]::Hidden $process.StartInfo.CreateNoWindow = $true $process.Start() | Out-Null if ($process.StartInfo.RedirectStandardOutput) { $process.BeginOutputReadLine() } if ($process.StartInfo.RedirectStandardError) { $process.BeginErrorReadLine() } $process.WaitForExit() # For some reason this forces the jobs to finish and waits for # them to do so. Without this it never finishes. Unregister-Event -SourceIdentifier "LogOutput_ChocolateyZipProc" Unregister-Event -SourceIdentifier "LogErrors_ChocolateyZipProc" # sometimes the process hasn't fully exited yet. for ($loopCount = 1; $loopCount -le 15; $loopCount++) { if ($process.HasExited) { break; } Write-Debug "Waiting for 7z.exe process to exit - $loopCount/15 seconds"; Start-Sleep 1; } $exitCode = $process.ExitCode $process.Dispose() Set-PowerShellExitCode $exitCode Write-Debug "Command ['$7zip' $params] exited with `'$exitCode`'." if ($zipExtractLogFullPath -and -not $disableLogging) { Set-Content $zipExtractLogFullPath $global:zipFileList.ToString() -Encoding UTF8 -Force } Write-Debug "7z exit code: $exitCode" $errorMessageAddendum = " This is most likely an issue with the '$env:chocolateyPackageName' package and not with Chocolatey itself. Please follow up with the package maintainer(s) directly." switch ($exitCode) { 0 { break } 1 { throw 'Some files could not be extracted.' + $errorMessageAddendum } # this one is returned e.g. for access denied errors 2 { throw '7-Zip encountered a fatal error while extracting the files.' + $errorMessageAddendum } 7 { throw ('7-Zip command line error.' + $errorMessageAddendum) } 8 { throw '7-Zip out of memory.' + $errorMessageAddendum } 255 { throw 'Extraction cancelled by the user.' + $errorMessageAddendum } default { throw "7-Zip signalled an unknown error (code $exitCode)" + $errorMessageAddendum } } $env:ChocolateyPackageInstallLocation = $destination return $destination } # SIG # Begin signature block # MIIjgQYJKoZIhvcNAQcCoIIjcjCCI24CAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCB6CtB07Ubh59UJ # h2QBHy5k+de4Lt8azGqBPYi0+g6Mh6CCHXowggUwMIIEGKADAgECAhAECRgbX9W7 # ZnVTQ7VvlVAIMA0GCSqGSIb3DQEBCwUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQK # EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNV # BAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0xMzEwMjIxMjAwMDBa # Fw0yODEwMjIxMjAwMDBaMHIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2Vy # dCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xMTAvBgNVBAMTKERpZ2lD # ZXJ0IFNIQTIgQXNzdXJlZCBJRCBDb2RlIFNpZ25pbmcgQ0EwggEiMA0GCSqGSIb3 # DQEBAQUAA4IBDwAwggEKAoIBAQD407Mcfw4Rr2d3B9MLMUkZz9D7RZmxOttE9X/l # qJ3bMtdx6nadBS63j/qSQ8Cl+YnUNxnXtqrwnIal2CWsDnkoOn7p0WfTxvspJ8fT # eyOU5JEjlpB3gvmhhCNmElQzUHSxKCa7JGnCwlLyFGeKiUXULaGj6YgsIJWuHEqH # CN8M9eJNYBi+qsSyrnAxZjNxPqxwoqvOf+l8y5Kh5TsxHM/q8grkV7tKtel05iv+ # bMt+dDk2DZDv5LVOpKnqagqrhPOsZ061xPeM0SAlI+sIZD5SlsHyDxL0xY4PwaLo # LFH3c7y9hbFig3NBggfkOItqcyDQD2RzPJ6fpjOp/RnfJZPRAgMBAAGjggHNMIIB # yTASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK # BggrBgEFBQcDAzB5BggrBgEFBQcBAQRtMGswJAYIKwYBBQUHMAGGGGh0dHA6Ly9v # Y3NwLmRpZ2ljZXJ0LmNvbTBDBggrBgEFBQcwAoY3aHR0cDovL2NhY2VydHMuZGln # aWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9vdENBLmNydDCBgQYDVR0fBHow # eDA6oDigNoY0aHR0cDovL2NybDQuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJl # ZElEUm9vdENBLmNybDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0Rp # Z2lDZXJ0QXNzdXJlZElEUm9vdENBLmNybDBPBgNVHSAESDBGMDgGCmCGSAGG/WwA # AgQwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzAK # BghghkgBhv1sAzAdBgNVHQ4EFgQUWsS5eyoKo6XqcQPAYPkt9mV1DlgwHwYDVR0j # BBgwFoAUReuir/SSy4IxLVGLp6chnfNtyA8wDQYJKoZIhvcNAQELBQADggEBAD7s # DVoks/Mi0RXILHwlKXaoHV0cLToaxO8wYdd+C2D9wz0PxK+L/e8q3yBVN7Dh9tGS # dQ9RtG6ljlriXiSBThCk7j9xjmMOE0ut119EefM2FAaK95xGTlz/kLEbBw6RFfu6 # r7VRwo0kriTGxycqoSkoGjpxKAI8LpGjwCUR4pwUR6F6aGivm6dcIFzZcbEMj7uo # +MUSaJ/PQMtARKUT8OZkDCUIQjKyNookAv4vcn4c10lFluhZHen6dGRrsutmQ9qz # sIzV6Q3d9gEgzpkxYz0IGhizgZtPxpMQBvwHgfqL2vmCSfdibqFT+hKUGIUukpHq # aGxEMrJmoecYpJpkUe8wggU5MIIEIaADAgECAhAKudMQ+yEr6IyBs9LC6M5RMA0G # CSqGSIb3DQEBCwUAMHIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJ # bmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xMTAvBgNVBAMTKERpZ2lDZXJ0 # IFNIQTIgQXNzdXJlZCBJRCBDb2RlIFNpZ25pbmcgQ0EwHhcNMjEwNDI3MDAwMDAw # WhcNMjQwNDMwMjM1OTU5WjB3MQswCQYDVQQGEwJVUzEPMA0GA1UECBMGS2Fuc2Fz # MQ8wDQYDVQQHEwZUb3Bla2ExIjAgBgNVBAoTGUNob2NvbGF0ZXkgU29mdHdhcmUs # IEluYy4xIjAgBgNVBAMTGUNob2NvbGF0ZXkgU29mdHdhcmUsIEluYy4wggEiMA0G # CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQChcaeNqeO3O3hzbDYYMcxvv/QNSPE4 # fpI+NGECR+FYdDO2utX9/SPxRCzWBrsgntPs/7IPk/uFZk/yTIiNoXO+cqJE45L9 # 2Ldfn6gAcwjGna/j2f/bbSFSeXW9z9lM3DJecFwXQleWR/8OKCnD+d1ZmHB0BA5v # 0bQCfU8ZT7S0u9+KAKqyqgZrJyQiPfBVqXes9RSua7+0SVXmaBrJf9njHAf5KNFY # /TEgm1r1zYwxfcsuE5eYdr2/suytUJpN18m9DmAdYm72va0KMxoKIBGuQy9DnaDI # +nMiegsdhkL9sIysIin7Pcwjkwx9lRmtIqJA27Hfgb1MaL0OnkpwRY+VAgMBAAGj # ggHEMIIBwDAfBgNVHSMEGDAWgBRaxLl7KgqjpepxA8Bg+S32ZXUOWDAdBgNVHQ4E # FgQUTvMFGF2V6ylQalFt+afRXjSaBIMwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQM # MAoGCCsGAQUFBwMDMHcGA1UdHwRwMG4wNaAzoDGGL2h0dHA6Ly9jcmwzLmRpZ2lj # ZXJ0LmNvbS9zaGEyLWFzc3VyZWQtY3MtZzEuY3JsMDWgM6Axhi9odHRwOi8vY3Js # NC5kaWdpY2VydC5jb20vc2hhMi1hc3N1cmVkLWNzLWcxLmNybDBLBgNVHSAERDBC # MDYGCWCGSAGG/WwDATApMCcGCCsGAQUFBwIBFhtodHRwOi8vd3d3LmRpZ2ljZXJ0 # LmNvbS9DUFMwCAYGZ4EMAQQBMIGEBggrBgEFBQcBAQR4MHYwJAYIKwYBBQUHMAGG # GGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBOBggrBgEFBQcwAoZCaHR0cDovL2Nh # Y2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0U0hBMkFzc3VyZWRJRENvZGVTaWdu # aW5nQ0EuY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggEBAKFxncHA # zDFesUJXaM21qMRk5+nIZcDuISfGgJcDjMHsRLw7na5Yn7IhiNY+OsKnPVkfPhL/ # MNXSHG6on+IpxiB2/Bry9thqKvpQdPBe8mFN0ctJDgrSceyRC5SA9EiO22J3YNe0 # yVEKAG+Yk2A/WhKBzCCpRskMlRr7KeLm6DvAgvDsMfkKtePMl2PraON+tFNpc2b1 # LTKT4okiU5uAWpjYAt9sYBsKTeZb5NJt0ZQ3akEEIAQs63/mSDAZlzMOJMWNK/yv # 4NU5CiPVcohJ0WjUJUIrAMmAVlZ2h8NhCXJOv28cHWEgPks/zqdDdIhJfDF+ALd1 # 0JTBrwCNcYQG68AwggWNMIIEdaADAgECAhAOmxiO+dAt5+/bUOIIQBhaMA0GCSqG # SIb3DQEBDAUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMx # GTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFz # c3VyZWQgSUQgUm9vdCBDQTAeFw0yMjA4MDEwMDAwMDBaFw0zMTExMDkyMzU5NTla # MGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsT # EHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9v # dCBHNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL/mkHNo3rvkXUo8 # MCIwaTPswqclLskhPfKK2FnC4SmnPVirdprNrnsbhA3EMB/zG6Q4FutWxpdtHauy # efLKEdLkX9YFPFIPUh/GnhWlfr6fqVcWWVVyr2iTcMKyunWZanMylNEQRBAu34Lz # B4TmdDttceItDBvuINXJIB1jKS3O7F5OyJP4IWGbNOsFxl7sWxq868nPzaw0QF+x # embud8hIqGZXV59UWI4MK7dPpzDZVu7Ke13jrclPXuU15zHL2pNe3I6PgNq2kZhA # kHnDeMe2scS1ahg4AxCN2NQ3pC4FfYj1gj4QkXCrVYJBMtfbBHMqbpEBfCFM1Lyu # GwN1XXhm2ToxRJozQL8I11pJpMLmqaBn3aQnvKFPObURWBf3JFxGj2T3wWmIdph2 # PVldQnaHiZdpekjw4KISG2aadMreSx7nDmOu5tTvkpI6nj3cAORFJYm2mkQZK37A # lLTSYW3rM9nF30sEAMx9HJXDj/chsrIRt7t/8tWMcCxBYKqxYxhElRp2Yn72gLD7 # 6GSmM9GJB+G9t+ZDpBi4pncB4Q+UDCEdslQpJYls5Q5SUUd0viastkF13nqsX40/ # ybzTQRESW+UQUOsxxcpyFiIJ33xMdT9j7CFfxCBRa2+xq4aLT8LWRV+dIPyhHsXA # j6KxfgommfXkaS+YHS312amyHeUbAgMBAAGjggE647b2bcae-a75e-4ff4-b902-49974aa08b4bC:\ProgramData\chocolatey\helpers\functions\Get-ChocolateyUnzip.ps1 4104132150x0146289Microsoft-Windows-PowerShell/OperationalEC2AMAZ-TJL6EBN12# Copyright © 2017 - 2021 Chocolatey Software, Inc. # Copyright © 2015 - 2017 RealDimensions Software, LLC # Copyright © 2011 - 2015 RealDimensions Software, LLC & original authors/contributors from https://github.com/chocolatey/chocolatey # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. function Get-ChocolateyUnzip { <# .SYNOPSIS Unzips an archive file and returns the location for further processing. .DESCRIPTION This unzips files using the 7-zip command line tool 7z.exe. Supported archive formats are listed at: https://sevenzip.osdn.jp/chm/general/formats.htm .INPUTS None .OUTPUTS Returns the passed in $destination. .NOTES If extraction fails, an exception is thrown. If you are embedding files into a package, ensure that you have the rights to redistribute those files if you are sharing this package publicly (like on the community feed). Otherwise, please use Install-ChocolateyZipPackage to download those resources from their official distribution points. Will automatically call Set-PowerShellExitCode to set the package exit code based on 7-zip's exit code. .PARAMETER FileFullPath This is the full path to the zip file. If embedding it in the package next to the install script, the path will be like `"$(Split-Path -Parent $MyInvocation.MyCommand.Definition)\\file.zip"` `File` is an alias for FileFullPath. This can be a 32-bit or 64-bit file. This is mandatory in earlier versions of Chocolatey, but optional if FileFullPath64 has been provided. .PARAMETER FileFullPath64 Full file path to a 64-bit native installer to run. If embedding in the package, you can get it to the path with `"$(Split-Path -parent $MyInvocation.MyCommand.Definition)\\INSTALLER_FILE"` Provide this when you want to provide both 32-bit and 64-bit installers or explicitly only a 64-bit installer (which will cause a package install failure on 32-bit systems). .PARAMETER Destination This is a directory where you would like the unzipped files to end up. If it does not exist, it will be created. .PARAMETER SpecificFolder OPTIONAL - This is a specific directory within zip file to extract. The folder and its contents will be extracted to the destination. .PARAMETER PackageName OPTIONAL - This will facilitate logging unzip activity for subsequent uninstalls .PARAMETER DisableLogging OPTIONAL - This disables logging of the extracted items. It speeds up extraction of archives with many files. Usage of this parameter will prevent Uninstall-ChocolateyZipPackage from working, extracted files will have to be cleaned up with Remove-Item or a similar command instead. .PARAMETER IgnoredArguments Allows splatting with arguments that do not apply. Do not use directly. .EXAMPLE > # Path to the folder where the script is executing $toolsDir = (Split-Path -parent $MyInvocation.MyCommand.Definition) Get-ChocolateyUnzip -FileFullPath "c:\someFile.zip" -Destination $toolsDir .LINK Install-ChocolateyZipPackage #> param( [alias("file")][parameter(Mandatory = $false, Position = 0)][string] $fileFullPath, [alias("unzipLocation")][parameter(Mandatory = $true, Position = 1)][string] $destination, [parameter(Mandatory = $false, Position = 2)][string] $specificFolder, [parameter(Mandatory = $false, Position = 3)][string] $packageName, [alias("file64")][parameter(Mandatory = $false)][string] $fileFullPath64, [parameter(Mandatory = $false)][switch] $disableLogging, [parameter(ValueFromRemainingArguments = $true)][Object[]] $ignoredArguments ) Write-FunctionCallLogMessage -Invocation $MyInvocation -Parameters $PSBoundParameters $bitnessMessage = '' $zipfileFullPath = $fileFullPath if ((Get-OSArchitectureWidth 32) -or $env:ChocolateyForceX86 -eq 'true') { if (!$fileFullPath) { throw "32-bit archive is not supported for $packageName"; } if ($fileFullPath64) { $bitnessMessage = '32-bit '; } } elseif ($fileFullPath64) { $zipfileFullPath = $fileFullPath64 $bitnessMessage = '64-bit ' } if ($zipfileFullPath -eq '' -or $zipfileFullPath -eq $null) { throw 'Package parameters incorrect, either FileFullPath or FileFullPath64 must be specified.' } if ($packageName) { $packagelibPath = $env:ChocolateyPackageFolder if (!(Test-Path -Path $packagelibPath)) { New-Item $packagelibPath -type directory } $zipFilename = Split-Path $zipfileFullPath -Leaf $zipExtractLogFullPath = Join-Path $packagelibPath $zipFilename`.txt } if ($env:chocolateyPackageName -ne $null -and $env:chocolateyPackageName -eq $env:ChocolateyInstallDirectoryPackage) { Write-Warning "Install Directory override not available for zip packages at this time.`n If this package also runs a native installer using Chocolatey`n functions, the directory will be honored." } Write-Host "Extracting $bitnessMessage$zipfileFullPath to $destination..." if (![System.IO.Directory]::Exists($destination)) { [System.IO.Directory]::CreateDirectory($destination) | Out-Null } $7zip = Join-Path "$helpersPath" '..\tools\7z.exe' if (!([System.IO.File]::Exists($7zip))) { Update-SessionEnvironment $7zip = Join-Path "$env:ChocolateyInstall" 'tools\7z.exe' } $7zip = [System.IO.Path]::GetFullPath($7zip) Write-Debug "7zip found at `'$7zip`'" # 32-bit 7z would not find C:\Windows\System32\config\systemprofile\AppData\Local\Temp, # because it gets translated to C:\Windows\SysWOW64\... by the WOW redirection layer. # Replace System32 with sysnative, which does not get redirected. # 32-bit 7z is required so it can see both architectures if ([IntPtr]::Size -ne 4) { $fileFullPathNoRedirection = $zipfileFullPath -ireplace ([System.Text.RegularExpressions.Regex]::Escape([Environment]::GetFolderPath('System'))), (Join-Path $Env:SystemRoot 'SysNative') $destinationNoRedirection = $destination -ireplace ([System.Text.RegularExpressions.Regex]::Escape([Environment]::GetFolderPath('System'))), (Join-Path $Env:SystemRoot 'SysNative') } else { $fileFullPathNoRedirection = $zipfileFullPath $destinationNoRedirection = $destination } $workingDirectory = $(Get-Location -PSProvider 'FileSystem') if ($workingDirectory -eq $null -or $workingDirectory.ProviderPath -eq $null) { Write-Debug "Unable to use current location for Working Directory. Using Cache Location instead." $workingDirectory = $env:TEMP } $workingDirectory = $workingDirectory.ProviderPath $loggingParam = '-bb1' if ($disableLogging) { $loggingParam = '-bb0' } $params = "x -aoa -bd $loggingParam -o`"$destinationNoRedirection`" -y `"$fileFullPathNoRedirection`"" if ($specificfolder) { $params += " `"$specificfolder`"" } Write-Debug "Executing command ['$7zip' $params]" # Capture 7z's output into a StringBuilder and write it out in blocks, to improve I/O performance. $global:zipFileList = New-Object System.Text.StringBuilder $global:zipDestinationFolder = $destination # Redirecting output slows things down a bit. $writeOutput = { if ($EventArgs.Data -ne $null) { $line = $EventArgs.Data Write-Verbose "$line" if ($line.StartsWith("- ")) { $global:zipFileList.AppendLine($global:zipDestinationFolder + "\" + $line.Substring(2)) } } } $writeError = { if ($EventArgs.Data -ne $null) { Write-Error "$($EventArgs.Data)" } } $process = New-Object System.Diagnostics.Process $process.EnableRaisingEvents = $true Register-ObjectEvent -InputObject $process -SourceIdentifier "LogOutput_ChocolateyZipProc" -EventName OutputDataReceived -Action $writeOutput | Out-Null Register-ObjectEvent -InputObject $process -SourceIdentifier "LogErrors_ChocolateyZipProc" -EventName ErrorDataReceived -Action $writeError | Out-Null $process.StartInfo = New-Object System.Diagnostics.ProcessStartInfo($7zip, $params) $process.StartInfo.RedirectStandardOutput = $true $process.StartInfo.RedirectStandardError = $true $process.StartInfo.UseShellExecute = $false $process.StartInfo.WorkingDirectory = $workingDirectory $process.StartInfo.WindowStyle = [System.Diagnostics.ProcessWindowStyle]::Hidden $process.StartInfo.CreateNoWindow = $true $process.Start() | Out-Null if ($process.StartInfo.RedirectStandardOutput) { $process.BeginOutputReadLine() } if ($process.StartInfo.RedirectStandardError) { $process.BeginErrorReadLine() } $process.WaitForExit() # For some reason this forces the jobs to finish and waits for # them to do so. Without this it never finishes. Unregister-Event -SourceIdentifier "LogOutput_ChocolateyZipProc" Unregister-Event -SourceIdentifier "LogErrors_ChocolateyZipProc" # sometimes the process hasn't fully exited yet. for ($loopCount = 1; $loopCount -le 15; $loopCount++) { if ($process.HasExited) { break; } Write-Debug "Waiting for 7z.exe process to exit - $loopCount/15 seconds"; Start-Sleep 1; } $exitCode = $process.ExitCode $process.Dispose() Set-PowerShellExitCode $exitCode Write-Debug "Command ['$7zip' $params] exited with `'$exitCode`'." if ($zipExtractLogFullPath -and -not $disableLogging) { Set-Content $zipExtractLogFullPath $global:zipFileList.ToString() -Encoding UTF8 -Force } Write-Debug "7z exit code: $exitCode" $errorMessageAddendum = " This is most likely an issue with the '$env:chocolateyPackageName' package and not with Chocolatey itself. Please follow up with the package maintainer(s) directly." switch ($exitCode) { 0 { break } 1 { throw 'Some files could not be extracted.' + $errorMessageAddendum } # this one is returned e.g. for access denied errors 2 { throw '7-Zip encountered a fatal error while extracting the files.' + $errorMessageAddendum } 7 { throw ('7-Zip command line error.' + $errorMessageAddendum) } 8 { throw '7-Zip out of memory.' + $errorMessageAddendum } 255 { throw 'Extraction cancelled by the user.' + $errorMessageAddendum } default { throw "7-Zip signalled an unknown error (code $exitCode)" + $errorMessageAddendum } } $env:ChocolateyPackageInstallLocation = $destination return $destination } # SIG # Begin signature block # MIIjgQYJKoZIhvcNAQcCoIIjcjCCI24CAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCB6CtB07Ubh59UJ # h2QBHy5k+de4Lt8azGqBPYi0+g6Mh6CCHXowggUwMIIEGKADAgECAhAECRgbX9W7 # ZnVTQ7VvlVAIMA0GCSqGSIb3DQEBCwUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQK # EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNV # BAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0xMzEwMjIxMjAwMDBa # Fw0yODEwMjIxMjAwMDBaMHIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2Vy # dCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xMTAvBgNVBAMTKERpZ2lD # ZXJ0IFNIQTIgQXNzdXJlZCBJRCBDb2RlIFNpZ25pbmcgQ0EwggEiMA0GCSqGSIb3 # DQEBAQUAA4IBDwAwggEKAoIBAQD407Mcfw4Rr2d3B9MLMUkZz9D7RZmxOttE9X/l # qJ3bMtdx6nadBS63j/qSQ8Cl+YnUNxnXtqrwnIal2CWsDnkoOn7p0WfTxvspJ8fT # eyOU5JEjlpB3gvmhhCNmElQzUHSxKCa7JGnCwlLyFGeKiUXULaGj6YgsIJWuHEqH # CN8M9eJNYBi+qsSyrnAxZjNxPqxwoqvOf+l8y5Kh5TsxHM/q8grkV7tKtel05iv+ # bMt+dDk2DZDv5LVOpKnqagqrhPOsZ061xPeM0SAlI+sIZD5SlsHyDxL0xY4PwaLo # LFH3c7y9hbFig3NBggfkOItqcyDQD2RzPJ6fpjOp/RnfJZPRAgMBAAGjggHNMIIB # yTASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK # BggrBgEFBQcDAzB5BggrBgEFBQcBAQRtMGswJAYIKwYBBQUHMAGGGGh0dHA6Ly9v # Y3NwLmRpZ2ljZXJ0LmNvbTBDBggrBgEFBQcwAoY3aHR0cDovL2NhY2VydHMuZGln # aWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9vdENBLmNydDCBgQYDVR0fBHow # eDA6oDigNoY0aHR0cDovL2NybDQuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJl # ZElEUm9vdENBLmNybDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0Rp # Z2lDZXJ0QXNzdXJlZElEUm9vdENBLmNybDBPBgNVHSAESDBGMDgGCmCGSAGG/WwA # AgQwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzAK # BghghkgBhv1sAzAdBgNVHQ4EFgQUWsS5eyoKo6XqcQPAYPkt9mV1DlgwHwYDVR0j # BBgwFoAUReuir/SSy4IxLVGLp6chnfNtyA8wDQYJKoZIhvcNAQELBQADggEBAD7s # DVoks/Mi0RXILHwlKXaoHV0cLToaxO8wYdd+C2D9wz0PxK+L/e8q3yBVN7Dh9tGS # dQ9RtG6ljlriXiSBThCk7j9xjmMOE0ut119EefM2FAaK95xGTlz/kLEbBw6RFfu6 # r7VRwo0kriTGxycqoSkoGjpxKAI8LpGjwCUR4pwUR6F6aGivm6dcIFzZcbEMj7uo # +MUSaJ/PQMtARKUT8OZkDCUIQjKyNookAv4vcn4c10lFluhZHen6dGRrsutmQ9qz # sIzV6Q3d9gEgzpkxYz0IGhizgZtPxpMQBvwHgfqL2vmCSfdibqFT+hKUGIUukpHq # aGxEMrJmoecYpJpkUe8wggU5MIIEIaADAgECAhAKudMQ+yEr6IyBs9LC6M5RMA0G # CSqGSIb3DQEBCwUAMHIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJ # bmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xMTAvBgNVBAMTKERpZ2lDZXJ0 # IFNIQTIgQXNzdXJlZCBJRCBDb2RlIFNpZ25pbmcgQ0EwHhcNMjEwNDI3MDAwMDAw # WhcNMjQwNDMwMjM1OTU5WjB3MQswCQYDVQQGEwJVUzEPMA0GA1UECBMGS2Fuc2Fz # MQ8wDQYDVQQHEwZUb3Bla2ExIjAgBgNVBAoTGUNob2NvbGF0ZXkgU29mdHdhcmUs # IEluYy4xIjAgBgNVBAMTGUNob2NvbGF0ZXkgU29mdHdhcmUsIEluYy4wggEiMA0G # CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQChcaeNqeO3O3hzbDYYMcxvv/QNSPE4 # fpI+NGECR+FYdDO2utX9/SPxRCzWBrsgntPs/7IPk/uFZk/yTIiNoXO+cqJE45L9 # 2Ldfn6gAcwjGna/j2f/bbSFSeXW9z9lM3DJecFwXQleWR/8OKCnD+d1ZmHB0BA5v # 0bQCfU8ZT7S0u9+KAKqyqgZrJyQiPfBVqXes9RSua7+0SVXmaBrJf9njHAf5KNFY # /TEgm1r1zYwxfcsuE5eYdr2/suytUJpN18m9DmAdYm72va0KMxoKIBGuQy9DnaDI 10ba2403-94b8-4ebc-bb6e-12fd11ec4bd3C:\ProgramData\chocolatey\helpers\functions\Get-ChocolateyUnzip.ps1