在.ps1文件的顶部使用CmdletBinding()是如何工作的?

5
考虑 PowerShell 代码示例(在此处)

powershell code

它在 .ps1 脚本文件的顶部有 [CmdletBinding()]

请注意 [CmdletBinding()] 在文件顶部,而不是函数中。

如何从命令行调用此文件并为参数分配值?

这种技术的名称是什么,我应该搜索并了解更多概念吗?


4
这是关于Functions_CmdletBindingAttribute的帮助。 - Bill_Stewart
3
这意味着你可以像调用函数一样调用文件名。例如:file.ps1 -param1 "Hello World" - Uuuuuumm
2
这个回答解决了你的问题吗?[cmdletbinding()]是什么以及它是如何工作的? - JosefZ
1
把文件看作是带有文件扩展名的大型函数,你可以使用 param 为文件分配参数,就像你可以为函数分配参数一样。此外,你也可以在文件中使用 [cmdletbinding()],就像在函数中一样。 - Nico Nekoru
@NekoMusume,谢谢。请添加您的答案,以便我将其标记为答案。 - Allan Xu
@JosefZ,不是的。请注意我的评论:“请注意[CmdletBinding()]在文件顶部而不是函数中。” Neko回答了我的问题。 - Allan Xu
1个回答

8

把文件看作一个有文件扩展名的大函数,您可以使用param为文件分配参数,就像在函数中一样。同时,您还可以像在函数中一样对文件使用[CmdletBinding()]。例如,如果我有一个具有多个开关并且可以接受参数的文件,我可以这样做:

[CmdletBinding()]
param([switch]$a,
      [string]$b)
if ($a) {return Write-Host $b -ForegroundColor red}
return Write-Host $b

这与执行相同

function MyName {
    [CmdletBinding()]
    param([switch]$a
        [string]$b)
    if ($a) {return Write-Host $b -ForegroundColor red}
    return Write-Host $b
}

你可以使用以下方式来调用它们

#file
.\MyName.ps1 -a -b Test

或者
#function
MyName -a -b Test

它们将有相同的输出,一个红色的测试

与批处理文件(.bat)不同,您不能直接使用脚本名称调用ps1脚本,因此仅使用MyName -a -b Test而没有定义函数将导致错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接