我有一个PowerShell函数Sort-VersionLabels
。当我将此函数添加到模块时,Import-Module会抱怨:
WARNING: Some imported command names include unapproved verbs which might make
them less discoverable. Use the Verbose parameter for more detail or type
Get-Verb to see the list of approved verbs.
根据this,Sort是一个“保留动词”。
什么可能是一个好的(和批准的)替代品?
更新
该函数采用以下形式的版本号数组:<major>.<minor>.<revision>[-<milestone[nr]>]
。里程碑可以是dev
,alpha
,beta
或stable
(按此顺序)。因此标准的排序对象功能将不起作用。
它将已排序的数组输出到管道线。
答案 0 :(得分:5)
我觉得像ConvertTo-SortedVersionLabels
之类的东西,虽然有点尴尬,却使用了一个已批准的非保留动词,但仍然很清楚。
您还可以将参数排序到不同的函数,例如Get-VersionLabels -Sorted
。
你将如何工作取决于你的模块整体以及你是否有这样的功能来修改。您目前的帖子中不清楚,但如果您使用更多详细信息进行编辑,我们可能会提供更多建议。
答案 1 :(得分:5)
这个问题的核心将产生自以为是的结果。这会产生一个难题,因为您正在寻找当前答案无法解决的特定内容。我知道您正在寻找一种逻辑上适合您的功能的解决方案,同时处于标准动词列表中,这是令人钦佩的。为了继续我先前的评论,我将尝试为所有可能适合您情况的已批准动词说明一个案例。我将经常参考您的问题中链接的批准动词列表,并将使用“AVL”以简化未来。
最终,AVL会被诅咒并做任何你想做的事情。 Sort
非常非常适合您要做的事情。您也可以在导入模块时使用-DisableNameChecking
。毕竟这只是一个警告。我认为Briatist's answer is also good。
评论的好处
不是你要求它,但当你说我们必须启用名称检查时我想到了这一点。只是为了好玩!
$reservedVerbs = "ForEach","Format","Group","Sort","Tee"
$approvedVerbList = (Get-Verb).Verb
Get-Command -Module Microsoft.WSMan.Management | ForEach-Object{
If ($approvedVerbList -notcontains ($_.Name -split "-")[0]){
Write-Warning "$($_.Name) does not use an approved verb."
}
If ($reservedVerbs -contains ($_.Name -split "-")[0]){
Write-Warning "$($_.Name) is using a reserved verb."
}
}
答案 2 :(得分:3)
每当我需要一个不是经过批准的PowerShell动词的动词时,我会使用Invoke- *代替。因此,在您的情况下,您可以将其命名为Invoke-SortVersionLabels
答案 3 :(得分:1)
您根本不需要特殊的cmdlet。如果VersionLabel
是一个对象,只需使用该集合并使用您需要的属性将其传递给Sort-Object
。
# Assuming a versionlabel has a 'Name' Property...
$VersionLabelCollection | Sort-Object -Property:Name