如何在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
)
答
可以这样想:PowerShell脚本是一个独立的ScriptBlock。
的[CmdletBinding()]
属性是param-block
的一部分。根据语言规范,参数块必须是ScriptBlock的第一部分(如果存在)。
所以,不,你不能CmdletBinding
属性之前放东西。
你可以做什么,是你的GeneratorTypes.ps1
脚本转换为一个模块,并使用
#Requires -Modules
,以确保当帕拉姆块解释它的加载。
棘手。与函数一起工作,但并非没有。看起来'[CmdletBinding()]'必须先到... – sodawillow
是的。我也注意到了。如果我不在参数中使用该枚举,则可以在'CmdletBinding'之后加载它,但我想在我的一个参数中使用枚举。我找到的唯一解决方案是在同一个文件中定义枚举类型。我不想把'CmdletBinding'放入函数中。 –
您可以随时点源类脚本cmdlet的脚本之外,调用它之前,像一个包装脚本:-)或建立班级您的个人资料 – sodawillow