我有一个脚本,它循环遍历 CSV 文件并为文件中的每一行创建一个 AD 用户。我想要整个主作业的第一个转录本,以及创建用户的每个循环的单独的第二个转录本。
它可能看起来像这样:
start transcript MASTER
import CSV file
foreach line in CSV file
start transcript UserX
create the user
stop transcript userX
stop transcript MASTER
这种行为(在转录本中“嵌套”转录本)在 Powershell 中是否可能?
Start-Transcript
命令允许您将文件保存到特定的 -Path
,但 Stop-Transcript
没有允许您停止特定文件的开关。
也许有不同的方法?
刚刚做了一点测试,您无法停止特定的转录,但您可以使用
Start-Transcript
启动多个转录。 Stop-Transcript
将停止最近开始的转录。我在这里用这段代码进行了测试:
Start-Transcript -Path log1.log
"cool"
Start-Transcript -Path log2.log
'hello
neato'
Stop-Transcript -?
Stop-Transcript # stops the log2.log transcript
Stop-Transcript # stops the log1.log transcript
这可能不是您想听到的,但我能够从这个测试中确定任何“父”转录本都会捕获子转录本的输出。因此
log2.log
仅包含“hello neato”和 Stop-Transcript
的帮助对话框,但 log1.log
还包含此内容及其自己的输出。
如果您想要将不同操作的结果输出到文件和管道,请了解重定向的工作原理并利用
Tee-Object
同时输出到管道和文件。
仅供将来参考,我留下了更完整的代码来演示用户循环之前、期间和之后的日志记录。感谢 Bender the Greatest 提供的解决方案。
Start-Transcript -Path "C:\logs\master_job.txt"
Write-Host "this is the maine program"
Write-Host "starting to work on users..."
foreach ($user in (1..10))
{
Write-Host "`n`n"
Start-Transcript -Path "C:\logs\user$user.txt"
Write-Host "working on user number $user"
Write-Host "adding more values to User $user"
Stop-Transcript
}
Write-Host "`n`ndoing some work after working on all users"
Write-Host "even more work"
Stop-Transcript