确保PowerShell功能名称唯一的最佳方法是什么?从版本1开始的标准是在动词破折号之后和名词之前输入一个简短的唯一ID。例如,使用我的首字母缩写,我可以创建函数Get-DWServer;这是好的,直到有人在不同的模块中创建一个函数来获取对数据仓库的对象引用并使用相同的函数名称。两三个字母是不够的,但读起来要难得多。
我更喜欢具有与.NET命名空间类似的唯一前缀*。这对组织来说更好,更容易看到并且可以使用标签完成。并且它可以优雅地扩展,因此您可以将其命名为DW.Get-Server或DW.Network.Get-Server。
这样做的缺点是它在模块导入/导出模块成员期间与PowerShell的正确动词检查相冲突。您可以通过在导入期间指定DisableNameChecking来解决这个问题,但我想知道如果这样做很草率,如果PowerShell 3提供更好的解决方案可能会很糟糕。我知道PS动词纯粹主义者(有没有?)会抱怨这可能“阻碍发现”但我想不出更好的选择。
你做什么?
(*您可以使用module_name \ function_name表示法引用导出的函数,但这不适用于制表符完成,但仍然无法解决函数名称唯一的问题。)
答案 0 :(得分:5)
我听过Jeffrey Snover(PowerShell的发明者)几次谈论这个问题,他把它描述为两难,而不是问题。必须管理两难,但不能完全解决。问题可以解决。作为一个PS动词“纯粹主义者”我会说最好的方法是给你的名词留一个2或3个字母的前缀。到目前为止,对于许多广泛分布的cmdlet来说,这已经足够了。 IE,Quest AD Cmdlet与微软的AD Cmdlet。 Get-ADUser和get-qaduser。
如果您正在使用模块并希望使用自己的前缀,则可以使用
指定一个模块import-module mymodule -Prefix myPrefix
我知道这不是单一的银弹答案,但我认为它适用于95%的情况。