在Powershell中启动多个转录本

问题描述 投票:0回答:2

我有一个脚本,它循环遍历 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
没有允许您停止特定文件的开关。

也许有不同的方法?

powershell
2个回答
4
投票

刚刚做了一点测试,您无法停止特定的转录,但您可以使用

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
同时输出到管道和文件。


0
投票

仅供将来参考,我留下了更完整的代码来演示用户循环之前、期间和之后的日志记录。感谢 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
© www.soinside.com 2019 - 2024. All rights reserved.