Powershell - 获取dot-sourced函数中调用脚本的脚本名称

时间:2014-03-05 12:38:57

标签: powershell

有没有办法将调用脚本的脚本名称转换为点源ps1脚本? 这对于记录来说非常棒。

例如:script test1.ps1正在从dot-sourced log.ps1调用一个函数。

log.ps1中需要字符串“test.ps1”。这可能吗? 提前致谢

3 个答案:

答案 0 :(得分:1)

如果您是点源log.ps1,则执行仍在Test.ps1内进行。

要获取正在执行的脚本的名称:

$ExecutingScript = $MyInvocation.MyCommand.Name
# Test.ps1

然后,您可以在点源脚本提供的任何日志记录功能中使用$ExecutingScript

如果您需要执行脚本的完整路径,请使用:

$MyInvocation.InvocationName
# C:\Whereever\Test.ps1

答案 1 :(得分:0)

您可以尝试:

$a = Split-Path $PSCommandPath -Leaf

答案 2 :(得分:0)

我试图解决类似或相同的问题 - 如何根据脚本名称生成日志文件名。来自@SomeShinyObject的解决方案很不错但是当您从日志中获取源自其他文件的日志记录脚本时,您就会遇到问题。我已经达成了以下解决方案。如果有人有兴趣。

$scriptFileName = Get-Item (Get-PSCallStack)[(Get-PSCallStack).length-1].ScriptName
$log = "$($scriptFileName.DirectoryName)\log\$($scriptFileName.Basename).log"

它基本上从调用堆栈中获得最高帧,首先使用(Get-PSCallStack).length获取堆栈深度然后它使用此值来获取帧本身并从那里获取ScriptName,这是调用层次结构中最重要的脚本。