Мой вопрос может показаться дубликатом PowerShell "echo on" , но это не так.
Я не заинтересован в захвате вывода команды, но в самой командной строке каждогоКоманда, выполняемая сценарием, включая собственные команды.
Это то, что делает "echo on" в cmd, и это то, что я ищу.Set-PSDebug -Trace 1
не делает этого и не пропускает флаг -Verbose
.
До сих пор я не видел пути, кроме как выводить их сам, что само по себе является огромной болью.
ТакМожет ли Powershell делать то, что "echo on" делает в cmd?
EDIT 1
Не идеально, но я бы принял ответ, предлагающий использовать функцию-обертку, которая быполучить команду (нативную или powershell) с параметрами и выполнить команду, одновременно сохраняя лог в соответствующей командной строке.Конечно, код функции-обертки должен быть частью ответа.
EDIT 2
Следующий тривиальный пример демонстрирует, почему Set-PSDebug -Trace 1
этого не делает:
tasklist `
/fi "status eq running" | Select-Object -First 4
Обратите внимание:
C:\> cat C:\temp\1.ps1
tasklist `
/fi "status eq running" | Select-Object -First 4
C:\> Set-PSDebug -Trace 1
C:\> C:\temp\1.ps1
DEBUG: 1+ >>>> C:\temp\1.ps1
DEBUG: 1+ >>>> tasklist `
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
csrss.exe 756 Console 1 2,816 K
C:\>
РЕДАКТИРОВАТЬ 3
Для сравнения посмотрите эквивалентный скрипт в cmd с echo on
:
C:\>type c:\temp\1.cmd
@echo on
tasklist ^
/fi "status eq running" |findstr/n ^^|findstr "^[1-4]:"
C:\>c:\temp\1.cmd
C:\>tasklist /fi "status eq running" | findstr/n ^ | findstr "^[1-4]:"
1:
2:Image Name PID Session Name Session# Mem Usage
3:========================= ======== ================ =========== ============
4:csrss.exe 756 Console 1 2,328 K
C:\>
РЕДАКТИРОВАТЬ 4
start-transcript
тоже не делает этого:
C:\WINDOWS\system32> cat c:\temp\1.ps1
tasklist `
/fi "status eq running" | Select-Object -First 4 | Out-Default
C:\WINDOWS\system32> Start-Transcript
Transcript started, output file is ~\Documents\PowerShell_transcript.L-PF0TBKV7.Sr1ntThx.20190611143800.txt
C:\WINDOWS\system32> c:\temp\1.ps1
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
csrss.exe 756 Console 1 2,936 K
C:\WINDOWS\system32> Stop-Transcript
Transcript stopped, output file is ~\Documents\PowerShell_transcript.L-PF0TBKV7.Sr1ntThx.20190611143800.txt
C:\WINDOWS\system32> cat ~\Documents\PowerShell_transcript.L-PF0TBKV7.Sr1ntThx.20190611143800.txt
**********************
Windows PowerShell transcript start
Start time: 20190611143800
Username: xyz\me
RunAs User: xyz\me
Configuration Name:
Machine: L-PF0TBKV7 (Microsoft Windows NT 10.0.16299.0)
Host Application: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Process ID: 25508
PSVersion: 5.1.16299.1004
PSEdition: Desktop
PSCompatibleVersions: 1.0, 2.0, 3.0, 4.0, 5.0, 5.1.16299.1004
BuildVersion: 10.0.16299.1004
CLRVersion: 4.0.30319.42000
WSManStackVersion: 3.0
PSRemotingProtocolVersion: 2.3
SerializationVersion: 1.1.0.1
**********************
Transcript started, output file is ~\Documents\PowerShell_transcript.L-PF0TBKV7.Sr1ntThx.20190611143800.txt
C:\WINDOWS\system32
>
PS>c:\temp\1.ps1
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
csrss.exe 756 Console 1 2,936 K
C:\WINDOWS\system32
>
PS>Stop-Transcript
**********************
Windows PowerShell transcript end
End time: 20190611143810
**********************
C:\WINDOWS\system32>
Как видите, он не содержит командной строки.