Ant*_*ean 5 powershell powershell-module
我在PowerShell脚本模块中定义了大量函数.我想使用Export-ModuleMember -Function *
,但我想只排除一个函数.排除这一功能比列出所有包含的功能更容易.反正有没有实现这个目标?
Mik*_*ard 16
关于排除函数的我的股票答案是对我想要导出的函数使用动词 - 名词命名,并对其他所有函数使用初始大写.
然后,Export-ModuleMember -function *-*
照顾它.
查找脚本中的所有函数,然后根据要排除的内容进行过滤(假设 PowerShell v2):
$errors = $null
$functions = [system.management.automation.psparser]::Tokenize($psISE.CurrentFile.Editor.Text, [ref]$errors) `
| ?{(($_.Content -Eq "Function") -or ($_.Content -eq "Filter")) -and $_.Type -eq "Keyword" } `
| Select-Object @{"Name"="FunctionName"; "Expression"={
$psISE.CurrentFile.Editor.Select($_.StartLine,$_.EndColumn+1,$_.StartLine,$psISE.CurrentFile.Editor.GetLineLength($_.StartLine))
$psISE.CurrentFile.Editor.SelectedText
}
}
Run Code Online (Sandbox Code Playgroud)
这是我在 v2 中用于创建ISE Function Explorer 的技术。但是,我不明白为什么这不适用于 ISE 之外的纯文本。不过,您需要解决插入符行的详细信息。这只是一个关于如何实现您想要的目标的示例。
现在,过滤不需要的内容并将其通过管道传输到Export-ModuleMember
!
$functions | ?{ $_.FunctionName -ne "your-excluded-function" }
Run Code Online (Sandbox Code Playgroud)
如果您使用 PowerShell v3,解析器会让事情变得更加容易。
所以我知道这已经太晚了,但简单的解决方案是将您不想导出的所有函数放在 Export-ModuleMember cmdlet 之后。该语句之后定义的任何函数都不会被导出,并且将可供您的模块使用(也称为私有函数)。
也许更优雅的方法是包含一个模块定义文件,并且简单地不在要包含的函数列表中包含该函数。
在模块内部编写代码以不包含模块中的函数的想法似乎过于复杂,这不是一个新功能,从 PowerShell 的早期开始,我就一直将函数放在 Export 之后。