Во-первых, ошибки, которые меня интересуют при перенаправлении, это НЕ ошибки 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 бит.