2020-10-01 14:45:33 +00:00
|
|
|
[CmdletBinding()]
|
|
|
|
param(
|
|
|
|
[Parameter(Mandatory = $true)]
|
|
|
|
[string]$Source,
|
|
|
|
|
|
|
|
[Parameter(Mandatory = $true)]
|
|
|
|
[string]$Target)
|
|
|
|
|
|
|
|
# This script translates the output from 7zdec into UTF8. Node has limited
|
|
|
|
# built-in support for encodings.
|
|
|
|
#
|
|
|
|
# 7zdec uses the system default code page. The system default code page varies
|
|
|
|
# depending on the locale configuration. On an en-US box, the system default code
|
|
|
|
# page is Windows-1252.
|
|
|
|
#
|
|
|
|
# Note, on a typical en-US box, testing with the 'ç' character is a good way to
|
|
|
|
# determine whether data is passed correctly between processes. This is because
|
|
|
|
# the 'ç' character has a different code point across each of the common encodings
|
|
|
|
# on a typical en-US box, i.e.
|
|
|
|
# 1) the default console-output code page (IBM437)
|
|
|
|
# 2) the system default code page (i.e. CP_ACP) (Windows-1252)
|
|
|
|
# 3) UTF8
|
|
|
|
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
|
|
|
|
|
|
# Redefine the wrapper over STDOUT to use UTF8. Node expects UTF8 by default.
|
|
|
|
$stdout = [System.Console]::OpenStandardOutput()
|
|
|
|
$utf8 = New-Object System.Text.UTF8Encoding($false) # do not emit BOM
|
|
|
|
$writer = New-Object System.IO.StreamWriter($stdout, $utf8)
|
|
|
|
[System.Console]::SetOut($writer)
|
|
|
|
|
|
|
|
# All subsequent output must be written using [System.Console]::WriteLine(). In
|
|
|
|
# PowerShell 4, Write-Host and Out-Default do not consider the updated stream writer.
|
|
|
|
|
|
|
|
Set-Location -LiteralPath $Target
|
|
|
|
|
|
|
|
# Print the ##command.
|
|
|
|
$_7zdec = Join-Path -Path "$PSScriptRoot" -ChildPath "externals/7zdec.exe"
|
|
|
|
[System.Console]::WriteLine("##[command]$_7zdec x `"$Source`"")
|
|
|
|
|
|
|
|
# The $OutputEncoding variable instructs PowerShell how to interpret the output
|
|
|
|
# from the external command.
|
|
|
|
$OutputEncoding = [System.Text.Encoding]::Default
|
|
|
|
|
|
|
|
# Note, the output from 7zdec.exe needs to be iterated over. Otherwise PowerShell.exe
|
|
|
|
# will launch the external command in such a way that it inherits the streams.
|
|
|
|
& $_7zdec x $Source 2>&1 |
|
|
|
|
ForEach-Object {
|
|
|
|
if ($_ -is [System.Management.Automation.ErrorRecord]) {
|
|
|
|
[System.Console]::WriteLine($_.Exception.Message)
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
[System.Console]::WriteLine($_)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
[System.Console]::WriteLine("##[debug]7zdec.exe exit code '$LASTEXITCODE'")
|
|
|
|
[System.Console]::Out.Flush()
|
|
|
|
if ($LASTEXITCODE -ne 0) {
|
|
|
|
exit $LASTEXITCODE
|
2019-06-19 13:44:17 +00:00
|
|
|
}
|