gpt4 book ai didi

powershell - powershell 中的 "echo on"或者如何让 Powershell 输出所有命令的命令行,包括脚本调用的 native 命令?

转载 作者:行者123 更新时间:2023-12-04 13:58:33 24 4
gpt4 key购买 nike

我的问题似乎与 PowerShell "echo on" 重复,但事实并非如此。

我对捕获命令输出不感兴趣,但对脚本执行的每个命令的命令行本身不感兴趣,包括 native 命令。

这就是 cmd 中的“echo on”所做的,这就是我正在寻找的。 Set-PSDebug -Trace 1不这样做,也不通过 -Verbose旗帜。

到目前为止,除了自己输出它们之外,我还没有看到其他方法,这本身就是一种巨大的痛苦。

那么,Powershell 可以做 cmd 中的“echo on”吗?

编辑 1

不理想,但我会接受建议使用包装函数的答案,该函数将接收带有参数的命令( native 或 powershell)并在忠实地记录相应命令行的同时运行该命令。当然,包装函数代码应该是答案的一部分。

编辑 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>

如您所见,它不包含命令行。

最佳答案

如果事件日志是一个选项,请通过启用此组策略开始跟踪。Administrative Templates -> Windows Components -> Windows PowerShellMicrosoft Docs - Script Tracing and Logging
那么你当然需要相应地解析事件日志......

关于powershell - powershell 中的 "echo on"或者如何让 Powershell 输出所有命令的命令行,包括脚本调用的 native 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56547884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com