スクリプト自身のパス、スクリプトを呼び出したスクリプトのパスを返す関数

よく分からないけどこれでいいんじゃなかろうか。

function Get-ScriptName
{
	<#
	.SYNOPSIS
	スクリプト名を取得する。
	.DESCRIPTION
	引数なしならスクリプト自身のフルパス。
	引数が$trueならスクリプトを直接呼び出したスクリプトのフルパス。
	#>
	param([bool]$caller)

	if($caller)
	{
		$script:myInvocation.ScriptName
	}
	else
	{
		$script:myInvocation.MyCommand.path
	}
}

と思ったけど、せっかくだからこんな関数を作った。

# profile.ps1

function Get-CalledScript
{
	<#
	.SYNOPSIS
	コールスタック上にあるスクリプト名を取得する。
	.DESCRIPTION
	引数が0だとこの関数が呼ばれたスクリプトの名前を返す。ただし、このファイルからは呼ばれないものとする。
	引数が1以上だとコールスタックを遡ってn個前のスクリプトを返す。
	引数なしだとスクリプト名の配列を返す。
	#>
	param([int]$level)

	$calledScripts = (Get-PSCallStack).ScriptName | ? {
		if($tmp -eq $null){ $tmp = $_; }
		if($tmp -ne $_){ $tmp = $_; $true }
	}

	if($PSBoundParameters.Count -eq 0)
	{
		$calledScripts
	}
	else
	{
		$calledScripts[$level]
	}
}