Если у меня есть следующее (упрощенная установка)
class.ps1
class Test {
Test() {
$MyInvocation | Show-Object
}
[void] Call() {
$MyInvocation | Show-Object
<#
here $MyInvocation.ScriptName, PSCommandPath show main.ps1 NOT
util.ps1 even though it is called from Util.ps1
#>
}
}
Util.ps1
Write-Host "Calling from Util.ps1"
$MyInvocation | Show-Object
Function Test-Util {
[CmdletBinding()]
Param()
Write-Host "Calling from Test-Util in Util.ps1"
$MyInvocation | Show-Object
}
Function Test-Class {
[CmdletBinding()]
Param()
write-host "Testing Class Test from Util.ps1"
$Test = [Test]::new()
Write-Host "Testing Class.Call() from Util.ps1"
$Test.Call()
}
Function Test-SubUtilTest {
[CmdletBinding()]
Param()
Test-SubUtil
}
SubUtil.ps1
Write-Host "Calling from SubUtil.ps1"
$MyInvocation | Show-Object
Function Test-SubUtil {
[CmdletBinding()]
Param()
Write-Host "Calling from Test-Util in Util.ps1"
$MyInvocation | Show-Object
<#
here $MyInvocation.ScriptName, PSCommandPath show Util.ps1 NOT
main.ps1 as it is called from Util.ps1
#>
}
Main.ps1
. C:\Users\jenny\Class.ps1
. C:\Users\jenny\Util.ps1
. C:\Users\jenny\SubUtil.ps1
Write-Host "From Main.ps1"
$MyInvocation | Show-Object
write-host "Calling Test-Util from util.ps1"
Test-Util
Write-Host "Calling Test-Class from util.ps1"
Test-Class
write-host "Calling Test-SubUtil from Util.ps1"
Test-SubUtilTest
$ Test = [Test] :: new ()
и
$Test.Call ()
оба выполняются из util.ps1
, но $ MyInvocation показывает мне только main.ps1
Как мне получить из конструкторакласса или одного из его методов определяют файл ps1, из которого исходит его вызывающий код, когда он находится в этом виде установки источника с вложенными точками
. Я попытался переключиться на & вместо.и я также попытался просто переместить точечный источник class.ps1 в файл util.ps1, но он все еще говорит мне, что main.ps1 является источником.
Плюс, настоящий файл класса - это одиночный файл, предназначенный дляиспользоваться в нескольких файлах util.ps1 с точечным источником, и я не уверен, смогу ли я создать точечный источник одного и того же файла класса в нескольких файлах, каждый из которых получен из файла main.ps1 (не то, чтобы переместить источник точек в один файл утилиты вэтот пример имеет значение)
Наконец, я использую Show-Object из модуля PowerShellCookbook.
Кажется странным, что он работает для вложенного вызова на основе функции, но не для вызова ккласс