2011-04-07 85 views
5

确保您的PowerShell函数名称是唯一的最佳方式是什么?从版本1开始的标准是在动词短划线之后和名词之前放置一个简短的唯一标识符。例如,用我的名字首字母可以创建函数Get-DWServer;这是没有问题的,直到有人在另一个模块中创建一个函数,以获取对数据仓库的对象引用并使用相同的函数名称。两三个字母是不够的,但比这更难看。PowerShell:确保函数名称唯一性的最佳方法?

我宁愿有一个独特的前缀*类似于.NET命名空间。这对组织更好,更容易上手,并且可以在制表符完成时使用。它可以正常扩展,因此可以将其命名为DW.Get-Server或DW.Network.Get-Server。

这样做的缺点是它在模块导入/导出模块成员期间与PowerShell的适当动词检查相违背。你可以通过在导入过程中指定DisableNameChecking来解决这个问题,但是我想知道如果做到这一点是草率的,并且如果PowerShell 3推出更好的解决方案可能会很糟糕。我知道PS动词纯粹主义者(是否有任何?)会抱怨说这可能“阻碍了发现”,但我想不出一个更好的选择。

你是做什么的? (*您可以使用module_name \ function_name表示法引用导出的函数,但这不适用于制表符完成,并且仍然没有解决函数名称唯一的问题)。

回答

5

我听说Jeffrey Snover(PowerShell的发明者)多次谈论这个问题,他形容这是一个困境,而不是问题。一个困境必须得到管理,但不能完全解决。问题可以解决。作为一个PS动词“纯粹主义者”,我会说管理这个最好的方法是给你的名词加一个2或3个字母的前缀。对于许多广泛分布的小命令来说,这已经足够了。 IE,Quest AD Cmdlet与微软的AD Cmdlet。 Get-ADUser和get-qaduser。

如果你是消费模块,并希望使用自己的前缀,你可以用

import-module mymodule -Prefix myPrefix 

指定一个我知道这是不是一个单一的银弹的答案,但我要说它适用于95%的情况。

+0

到目前为止,使用名词前缀已经适用于我,但我的范围已经较小:主要是脚本点源其他脚本。当我将所有内容迁移到一系列模块时,我一直希望有一个更安全,更长期的解决方案。使用Import-Module -Prefix适用于使用一个或两个模块的脚本,但我正在寻找一个更简单的标准,用于模块中的函数调用其他模块中的函数。 动词 - 名词符号是非常有用的,所以我不想把它写下来;我可能会坚持下去,穿过我的手指。 – DanW 2011-04-08 15:54:03

+1

如果您正在寻找有关如何调用其他函数的标准,请使用Module \ Verb-Noun。 – JasonMArcher 2011-04-22 00:22:17

相关问题