gpt4 book ai didi

powershell - 从 Powershell 中的闭包调用函数

转载 作者:行者123 更新时间:2023-12-02 22:39:30 24 4
gpt4 key购买 nike

我有一个函数返回调用另一个函数的脚本 block 。 (这听起来可能过于复杂,但在实际代码中是有意义的。)

它在 ISE 中有效,但在常规控制台中无效。

我是不是做错了什么,或者这是 PowerShell 中的错误?有解决方法吗?

以下是显示问题的一些最小代码:

function SomeFunc([string]$name)
{
"Hello, $name!"
}

function GetBlock([string]$name)
{
{ SomeFunc $name }.GetNewClosure()
}

$block = GetBlock("World")

& $block

请将代码放入文件中 并执行该文件以查看错误。如果您只是将其粘贴到控制台,则不会出现错误。

当我在 ISE 中按 F5 运行它时,我得到了预期的结果:

Hello, World!

但是,当我在常规控制台中运行它时,出现错误:

SomeFunc : The term 'SomeFunc' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At E:\scratch\Untitled4.ps1:8 char:7
+ { SomeFunc $name}.GetNewClosure()
+ ~~~~~~~~
+ CategoryInfo : ObjectNotFound: (SomeFunc:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

这是我的$psversiontable:

Name                           Value
---- -----
PSVersion 5.1.16299.251
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.16299.251
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1

最佳答案

将脚本 block 中调用的函数的范围设置为 global 会得到所需的 Hello, World!

function global:SomeFunc([string]$name)
{
"Hello, $name!"
}

请注意,将 SomeFunc 设为全局会导致它在脚本完成执行后保持可用,因此您需要小心命名以避免屏蔽其他一些命令。

关于powershell - 从 Powershell 中的闭包调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49440989/

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