Можно ли включать только функции без выполнения скрипта?

Скажем, у меня есть 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")
    }
}

5
задан Andy Arismendi 11 May 2012 в 00:31
поделиться