【发布时间】:2012-05-10 19:08:10
【问题描述】:
假设我有 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 的解析器?我看到使用 [System.Management.Automation.Language.Parser]::ParseInput 的 PSv3 可能会这样做,但这不是一个选项,因为它必须在 PSv2 上工作。
我问的原因是我正在尝试Pester PowerShell 单元测试框架,它对函数运行测试的方式是通过点源文件与测试夹具中的函数。测试夹具如下所示:
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")
}
}
【问题讨论】:
-
你不能把函数放在他们自己的文件里吗?
-
@Lee 我想避免重新组织源代码(有一堆像 MyScript.ps1 文件这样的脚本)。
标签: powershell pester