如何捕获 PowerShellStart-Transcript
命令的默认路径以进一步调用它Invoke-Item
?有没有办法通过管道Start-Transcript
传输到变量并拆分脚本文件的完整路径?
Start-Transcript | $TranscriptFile
Stop-Transcript
Invoke-Item $TranscriptFile
如何捕获 PowerShellStart-Transcript
命令的默认路径以进一步调用它Invoke-Item
?有没有办法通过管道Start-Transcript
传输到变量并拆分脚本文件的完整路径?
Start-Transcript | $TranscriptFile
Stop-Transcript
Invoke-Item $TranscriptFile
我发现:
Start-Transcript | Select Path -OutVariable TranscriptFile
Stop-Transcript
Invoke-Item $TranscriptFile.Path
最简单的 PSv5+解决方案:
$transcriptFilePath = (Start-Transcript).Path
# ...
$null = Stop-Transcript
Invoke-Item $transcriptFilePath
虽然Start-Transcript
将状态消息输出为字符串(其中还包含脚本文件路径,但必须从消息中提取),但该字符串实例具有.Path
包含脚本文件路径的由 PowerShell 添加的属性。
通常,您可以通过属性查询对象的 PS 添加.psextended
属性(对 Tab 补全隐藏Get-Member
,默认隐藏):
> (Start-Transcript).psextended
Path
----
/Users/jdoe/PowerShell_transcript.JdoesMachine.Q83psmn4.20170729002407.txt
PSv4-解决方案:
该.Path
属性是在 v5 中引入的,因此在早期版本中需要采用不同的方法。
# Remove everything from the message before the file path.
$transcriptFilePath = (Start-Transcript) -replace '^.*?(?=[a-z]:[\\/])'
请注意,由于文件路径通常没有嵌入空格,因此更简单的方法通常可以工作,但$transcriptFilePath = (-split (Split-Path))[-1]
PetSerAl指出它们可以有,因为您可以将 Documents 文件夹重定向到任意位置并且用户名可能包含空格。
这是可行的,因为生成的默认文件路径在状态消息中最后Start-TranScript
提到,没有尾随字符。
请注意,我假设 状态消息的本地化版本最后还提到了脚本文件路径,但我尚未验证。
您可以使用 $TRANSCRIPT 全局变量将其设置为您想要的任何位置,而不是捕获默认位置,例如:
$MyTranscriptFile = 'C:\MyFolder\PowerShell_transcript.'+$Env:COMPUTERNAME+'.'+(Get-Date).ToString("yyyyMMdd.HHmmss")+'.txt'
$TRANSCRIPT = $MyTranscriptFile
Start-Transcript
Stop-Transcript
Invoke-Item $MyTranscriptFile
要重置回 Powershell 的默认位置,只需分配 $null:
$TRANSCRIPT = $null