gpt4 book ai didi

function - 为什么脚本化的 cmdlet 被列为函数?

转载 作者:行者123 更新时间:2023-12-03 20:28:47 24 4
gpt4 key购买 nike

如果我创建一个简单的 Powershell 函数,例如

Function Hello {
[CmdletBinding( )]
Param (
[parameter()]
$Name
)
Begin{}
Process{
Write-Output "Hello $Name"
}
End{}
}

然后使用 Get-Command 以 Get-Command Hello 列出它,该 cmdlet 被列为“CommandType”函数。为什么它没有列为“CommandType”cmdlet?

从模块导出时,我还发现我必须使用 FunctionsToExport 而不是 CmdletsToExport。

好像不影响函数的使用,我只是好奇为什么会这样列出。

最佳答案

函数和 cmdlet 之间可能没有太大区别,但这取决于您愿意在编写函数时投入多少工作。唐·琼斯 wrote an article on TechNet当这些第一次出现以突出其中一些差异时。

These functions, written entirely in script, have the same capabilities as a “real” cmdlet written in C# or Visual Basic and compiled in Visual Studio. These advanced functions (they were originally called “script cmdlets” early in the v2 development cycle) help you write more flexible functions you can then use seamlessly alongside regular cmdlets.

...

The real difference between a mere function and a full cmdlet is that cmdlets support powerful parameter bindings. You can use positional parameters, named parameters, mandatory parameters, and even do basic parameter validation checks—all by simply describing the parameter to the shell.


您提供的代码示例通过 [CmdletBinding()] 允许添加大量参数,已经开始模糊两者之间的界限。 ,并开始描述一个名为 $Name 的全新参数.例如,您现在可以使用 Write-Verbose该函数中的任何位置,然后调用 -Verbose标记以查看这些语句,而无需做任何额外的工作。
从功能上讲,编译后的 cmdlet 或用 powershell 编写的函数的最终结果根本不必有太大的不同——这似乎更像是将编译后的 cmdlet 与脚本函数区分开来的问题。

关于function - 为什么脚本化的 cmdlet 被列为函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18469012/

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