我的问题可能看起来与PowerShell "echo on"重复,但事实并非如此。
我对捕获命令输出不感兴趣,而是对脚本执行的每个命令的命令行本身感兴趣,包括本机命令。
这就是 cmd 中的“echo on”所做的,这就是我正在寻找的。Set-PSDebug -Trace 1不这样做,也不传递-Verbose旗帜。
到目前为止,除了自己输出它们之外,我还没有找到其他方法,这本身就是一个巨大的痛苦。
那么,Powershell 可以做 cmd 中“echo on”所做的事情吗?
编辑1
并不理想,但我会接受建议使用包装函数的答案,该函数将接收带有参数的命令(本机或 powershell)并运行该命令,同时忠实地记录相应的命令行。当然,包装函数代码应该是答案的一部分。
编辑2
下面的简单示例演示了为什么Set-PSDebug -Trace 1不这样做:
tasklist `
/fi "status eq running" | Select-Object -First 4
Run Code Online (Sandbox Code Playgroud)
请注意:
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:\>
Run Code Online (Sandbox Code Playgroud)
编辑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:\>
Run Code Online (Sandbox Code Playgroud)
编辑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>
Run Code Online (Sandbox Code Playgroud)
如您所见,它不包含命令行。
Den*_*nis -1
如果可以选择事件日志,请通过启用此组策略来开始跟踪。
Administrative Templates -> Windows Components -> Windows PowerShell
那么您当然需要相应地解析事件日志......
| 归档时间: |
|
| 查看次数: |
3477 次 |
| 最近记录: |