#test.ps1 & $PSScriptRoot\ConsoleApp.exe
$ErrorActionPreference = "Stop" function RunConsole($scriptBlock) { $encoding = [Console]::OutputEncoding [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("cp866") try { &$scriptBlock } finally { [Console]::OutputEncoding = $encoding } } RunConsole { & $PSScriptRoot\ConsoleApp1.exe }
$ErrorActionPreference = "Stop" function RunConsole($scriptBlock) { # "" : Exception setting "OutputEncoding": "The handle is invalid." & cmd /c ver | Out-Null $encoding = [Console]::OutputEncoding [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("cp866") try { &$scriptBlock } finally { [Console]::OutputEncoding = $encoding } } RunConsole { & $PSScriptRoot\ConsoleApp1.exe }
param($script) $ErrorActionPreference = "Stop" $s = New-PSSession "." try { $path = "$PSScriptRoot\$script" Invoke-Command -Session $s -ScriptBlock { &$using:path } } finally { Remove-PSSession -Session $s }
$ErrorActionPreference = "Stop" #$VerbosePreference = "Continue" function RunConsole($scriptBlock) { function ConvertTo-Encoding ([string]$From, [string]$To) { Begin { $encFrom = [System.Text.Encoding]::GetEncoding($from) $encTo = [System.Text.Encoding]::GetEncoding($to) } Process { $bytes = $encTo.GetBytes($_) $bytes = [System.Text.Encoding]::Convert($encFrom, $encTo, $bytes) $encTo.GetString($bytes) } } Write-Verbose "RunConsole: Pipline mode" &$scriptBlock | ConvertTo-Encoding cp866 windows-1251 } RunConsole { & $PSScriptRoot\ConsoleApp1.exe }
$ErrorActionPreference = "Stop" #$VerbosePreference = "Continue" function RunConsole($scriptBlock) { if([Environment]::UserInteractive) { # "" : Exception setting "OutputEncoding": "The handle is invalid." & cmd /c ver | Out-Null $encoding = [Console]::OutputEncoding [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("cp866") try { Write-Verbose "RunConsole: Console.OutputEncoding mode" &$scriptBlock return } finally { [Console]::OutputEncoding = $encoding } } function ConvertTo-Encoding ([string]$From, [string]$To) { Begin { $encFrom = [System.Text.Encoding]::GetEncoding($from) $encTo = [System.Text.Encoding]::GetEncoding($to) } Process { $bytes = $encTo.GetBytes($_) $bytes = [System.Text.Encoding]::Convert($encFrom, $encTo, $bytes) $encTo.GetString($bytes) } } Write-Verbose "RunConsole: Pipline mode" &$scriptBlock | ConvertTo-Encoding cp866 windows-1251 } RunConsole { & $PSScriptRoot\ConsoleApp1.exe }
$ErrorActionPreference = "Stop" #$VerbosePreference = "Continue" function RunConsole($scriptBlock) { if([Environment]::UserInteractive) { # "" : Exception setting "OutputEncoding": "The handle is invalid." & cmd /c ver | Out-Null $encoding = [Console]::OutputEncoding [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("cp866") try { Write-Verbose "RunConsole: Console.OutputEncoding mode" $prevErrAction = $ErrorActionPreference $ErrorActionPreference = "Continue" try { &$scriptBlock return } finally { $ErrorActionPreference = $prevErrAction } } finally { [Console]::OutputEncoding = $encoding } } function ConvertTo-Encoding ([string]$From, [string]$To) { Begin { $encFrom = [System.Text.Encoding]::GetEncoding($from) $encTo = [System.Text.Encoding]::GetEncoding($to) } Process { $bytes = $encTo.GetBytes($_) $bytes = [System.Text.Encoding]::Convert($encFrom, $encTo, $bytes) $encTo.GetString($bytes) } } Write-Verbose "RunConsole: Pipline mode" $prevErrAction = $ErrorActionPreference $ErrorActionPreference = "Continue" try { &$scriptBlock | ConvertTo-Encoding cp866 windows-1251 return } finally { $ErrorActionPreference = $prevErrAction } } RunConsole { & $PSScriptRoot\ConsoleApp2.exe } Write-Host "ExitCode = $LASTEXITCODE"
echo error message 1>&2
#error.cmd #echo error message 1>&2 #errorActionTest.ps1 $ErrorActionPreference = "Stop" Write-Host "before" Invoke-Expression -ErrorAction SilentlyContinue -Command $PSScriptRoot\error.cmd Write-Host "after"
param($script) $ErrorActionPreference = "Stop" $s = New-PSSession "." try { $path = "$PSScriptRoot\$script" $err = @() $r = Invoke-Command -Session $s -ErrorAction Continue -ErrorVariable err -ScriptBlock ` { $ErrorActionPreference = "Stop" & $using:path | Out-Host return $true } if($r -ne $true) { Write-Error "The remote script was completed with an error" } if($err.length -ne 0) { Write-Warning "Error occurred on remote host" } } finally { Remove-PSSession -Session $s }
$ErrorActionPreference = "Stop" #$VerbosePreference = "continue" $consoleAllocated = [Environment]::UserInteractive function AllocConsole() { if($Global:consoleAllocated) { return } &cmd /c ver | Out-Null $a = @' [DllImport("kernel32", SetLastError = true)] public static extern bool AllocConsole(); '@ $params = New-Object CodeDom.Compiler.CompilerParameters $params.MainClass = "methods" $params.GenerateInMemory = $true $params.CompilerOptions = "/unsafe" $r = Add-Type -MemberDefinition $a -Name methods -Namespace kernel32 -PassThru -CompilerParameters $params Write-Verbose "Allocating console" [kernel32.methods]::AllocConsole() | Out-Null Write-Verbose "Console allocated" $Global:consoleAllocated = $true } function RunConsole($scriptBlock) { AllocConsole $encoding = [Console]::OutputEncoding [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("cp866") $prevErrAction = $ErrorActionPreference $ErrorActionPreference = "Continue" try { & $scriptBlock } finally { $ErrorActionPreference = $prevErrAction [Console]::OutputEncoding = $encoding } } RunConsole { & $PSScriptRoot\ConsoleApp2.exe } Write-Host "ExitCode = $LASTEXITCODE"
[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("utf-8")
Source: https://habr.com/ru/post/321076/
All Articles