替代"排序"作为PowerShell动词?

时间:2014-11-27 15:02:48

标签: powershell

我有一个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]>]。里程碑可以是devalphabetastable(按此顺序)。因此标准的排序对象功能将不起作用。

它将已排序的数组输出到管道线。

4 个答案:

答案 0 :(得分:5)

我觉得像ConvertTo-SortedVersionLabels之类的东西,虽然有点尴尬,却使用了一个已批准的非保留动词,但仍然很清楚。

您还可以将参数排序到不同的函数,例如Get-VersionLabels -Sorted

你将如何工作取决于你的模块整体以及你是否有这样的功能来修改。您目前的帖子中不清楚,但如果您使用更多详细信息进行编辑,我们可能会提供更多建议。

答案 1 :(得分:5)

这个问题的核心将产生自以为是的结果。这会产生一个难题,因为您正在寻找当前答案无法解决的特定内容。我知道您正在寻找一种逻辑上适合您的功能的解决方案,同时处于标准动词列表中,这是令人钦佩的。为了继续我先前的评论,我将尝试为所有可能适合您情况的已批准动词说明一个案例。我将经常参考您的问题中链接的批准动词列表,并将使用“AVL”以简化未来。

  1. 群组:AVL上的注释是指使用此代替Arrange。作为Sort的同义词安排将是一个很好的选择。坚持推荐,我们应该使用
  2. 设置:它是Sort的同义词。但是,在AVL中,它与写入,重置,分配或配置相关联,这与您的cmdlet无关。尽管如此,如果您愿意放弃使用现有PowerShell cmdlet创建的分解,它仍然可以放在列表中。
  3. 我真的没有3号。
  4. 更新:这是一个弱点,但AVL将其用作维护[cmdlet]状态[和]准确度的方式。
  5. 订购/整理:不在AVL中,但我发现这些非常合适,目前不与任何现有动词发生冲突。
  6. 最终,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