gpt4 book ai didi

powershell - 是否可以只包含函数而不执行脚本?

转载 作者:行者123 更新时间:2023-12-04 18:48:10 26 4
gpt4 key购买 nike

假设我有 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")
}
}

最佳答案

使用 Doug's Get-Function function你可以这样包含函数:

$script = get-item .\myscript.ps1
foreach ($function in (get-function $script))
{
$startline = $function.line - 1
$endline = $startline
$successful = $false
while (! $successful)
{
try {
$partialfunction = ((get-content $script)[$startline..$endline]) -join [environment]::newline
invoke-expression $partialfunction
$successful = $true
}
catch [Exception] { $endline++ }
}
}

编辑 :在 Powershell V2 中可以使用 [System.Management.Automation.IncompleteParseException] 代替 [Exception]。

关于powershell - 是否可以只包含函数而不执行脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10540632/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com