Скажем, у меня есть MyScript.ps1:
[cmdletbinding()]
param (
[Parameter(Mandatory=$true)]
[string] $MyInput
)
function Show-Input {
param ([string] $Incoming)
Write-Output $Incoming
}
function Save-TheWorld {
#ToDo
}
Write-Host (Show-Input $MyInput)
Можно ли как-то расставить исходники функций? Проблема в том, что если приведенный выше сценарий имеет точечный источник, он выполняет все это...
Мой лучший вариант - использовать Get-Content
, анализировать функции и использовать Invoke-Expression.. .? Или есть способ программно получить доступ к парсеру PowerShell? Я вижу, что это возможно с PSv3, используя [System.Management.Automation.Language.Parser]::ParseInput
, но это не вариант, потому что он должен работать на PSv2.
Причина, по которой я спрашиваю, заключается в том, что я пробую среду модульного тестирования PesterPowerShell, и способ, которым она запускает тесты функций, заключается в том, что файл с функциями находится в тестовом приспособлении. . Тестовое приспособление выглядит следующим образом:
MyScript.Tests.ps1
$here = Split-Path -Parent $MyInvocation.MyCommand.Path
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path).Replace(".Tests.", ".")
. "$here\$sut"
Describe "Show-Input" {
It "Verifies input 'Hello' is equal to output 'Hello'" {
$output = Show-Input "Hello"
$output.should.be("Hello")
}
}