Во-первых, ошибки, которые меня интересуют при перенаправлении, это НЕ ошибки PowerShell, а ошибки, генерируемые скриптом Python, который вызывается из моего скрипта PowerShell. Я прочитал несколько постов здесь (и других сайтов StackExchange, статью парня по сценариям Windows PowerShell и другие разные места). Это привело меня к разработке сценария, как показано ниже, но результат несколько странный.

$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
$ErrorActionPreference = "Continue"

$SnapsToTest = Get-ChildItem C:\Snaps\ -Directory
$ErrorFile = "C:\Tools\Scripts\Errors.txt"
$SnapDir = "C:\Logs"
$LogDir = "\var\log\"
$LogFile = "support.log"
$env:PYTHONIOENCODING="UTF-8"

Start-Transcript -path $ErrorFile
Push-Location
Set-Location -Path $SnapDir

$SnapsToTest | ForEach-Object {
        Write-Host $_.Name
        python C:\Tools\Scripts\script1.py $_.Name
        $LogToTest = $_.Name+$LogDir+$LogFile
        python C:\Tools\Scripts\script2.py $LogToTest
    }

Pop-Location
Stop-Transcript

Теперь, если я запускаю скрипт, используя .\myscript.ps1 > output.text я почти получаю то, что мне нужно, но не совсем.

Я получаю два файла, output.text и errors.txt .

Выходной текст показывает весь вывод, сгенерированный скриптом Python. Текстовый файл ошибок показывает НЕКОТОРЫЕ выходные данные, записанные на экран, но не в случае сбоя сценария Python и записи его трассировки стека, однако я действительно вижу это в терминале, и этого я не понимаю.

Например, вывод, который я вижу в текстовом файле ошибки:

**********************
Windows PowerShell transcript start
Start time: 20160429160228
Username: PC\me
RunAs User: PC\me
Machine: PC(Microsoft Windows NT 10.0.14328.0)
Host Application: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Process ID: 16844
PSVersion: 5.1.14328.1000
PSEdition: Desktop
PSCompatibleVersions: 1.0, 2.0, 3.0, 4.0, 5.0, 5.1.14328.1000
CLRVersion: 4.0.30319.42000
BuildVersion: 10.0.14328.1000
WSManStackVersion: 3.0
PSRemotingProtocolVersion: 2.3
SerializationVersion: 1.1.0.1
**********************
SnapDir1
SnapDir2
SnapDir3

Тем не менее, то, что я вижу в консоли:

C:\Tools\Scripts> .\myscript.ps1 | Out-File output.txt
SnapDir1
SnapDir2
Traceback (most recent call last):
  File "C:\Tools\Scripts\script1.py", line 446, in <module>
    main(sys.argv[1])
  File "C:\Tools\Scripts\script1.py", line 436, in main
    dba = DBAnalyser(rootdir)
  File "C:\Tools\Scripts\script1.py", line 54, in __init__
    self.osstatus = self._read_osstatus(osstatus_file)
  File "C:\Tools\Scripts\script1.py", line 170, in _read_osstatus
    ret[hostname]["meminfo"] = { "memtotal": memtotal, "memfree": memfree}
UnboundLocalError: local variable 'memtotal' referenced before assignment
SnapDir3

Я не вижу, как получить вышеуказанную ошибку, которую я вижу в консоли PowerShell, чтобы показать в файле Errors.txt

Это работает в Windows 10 Pro 64 бит.

0