60 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PowerShell
		
	
	
	
	
	
		
		
			
		
	
	
			60 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PowerShell
		
	
	
	
	
	
|  | [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 | ||
|  | } |