如何在CmdletBinding之前加载另一个powershell文件?

问题描述:

我正在使用powershell 5.我在不同的ps1文件中创建了一个枚举,并且我喜欢将它加载到另一个具有CmdletBinding的ps1中。如何在CmdletBinding之前加载另一个powershell文件?

我尝试下面的代码,但没有奏效。有没有办法在CmdletBinding之前加载enum ps1?

. ".\GeneratorType.ps1" 

[CmdletBinding()] 
Param 
(
     [Parameter(ValueFromPipeline=$True,ValueFromPipelineByPropertyName = $True,Mandatory=$False)]  
     [GeneratorType]$type = [GeneratorType]::All 
) 
+0

棘手。与函数一起工作,但并非没有。看起来'[CmdletBinding()]'必须先到... – sodawillow

+0

是的。我也注意到了。如果我不在参数中使用该枚举,则可以在'CmdletBinding'之后加载它,但我想在我的一个参数中使用枚举。我找到的唯一解决方案是在同一个文件中定义枚举类型。我不想把'CmdletBinding'放入函数中。 –

+1

您可以随时点源类脚本cmdlet的脚本之外,调用它之前,像一个包装脚本:-)或建立班级您的个人资料 – sodawillow

可以这样想:PowerShell脚本是一个独立的ScriptBlock。

[CmdletBinding()]属性是param-block的一部分。根据语言规范,参数块必须是ScriptBlock的第一部分(如果存在)。

所以,不,你不能CmdletBinding属性之前放东西。

你可以做什么,是你的GeneratorTypes.ps1脚本转换为一个模块,并使用

#Requires -Modules 

,以确保当帕拉姆块解释它的加载。