2011-01-11 13 views
5

いくつかのメタデータ属性をpowershellマクロに割り当てることは可能ですか?私はマクロのセットを持っており、それらを論理グループにカプセル化したい。私のようなものを想像:Powershellの属性ですか?

[UnitTest] 
function Do-Something() 
{ 
... 
} 

をして、実行時にロードされたすべてのマクロを渡すようにそれらをフィルタリング:そこ...私は任意のヘルプ

答えて

5

興味深い質問についてGREATFULなります

$macrosInRuntime = Get-Item function: 
$unitTestMacros = $macrosInRuntime | 
    ? {$_.Attributes -contain "UnitTest"} # <-- ??? 
foreach ($macro in $unitTestMacros) 
{ 
    .... 
} 

そのようなAFAIKの属性はありません。しかし、私は、コメントベースのヘルプ属性を使用する(ハッキーではないかもしれませんが、私はあまりよく分かりません)ハーフな方法があると思います。

<# 
.FUNCTIONALITY 
    TEST1 
#> 
function Do-Something1 
{} 

<# 
.FUNCTIONALITY 
    TEST2 
#> 
function Do-Something2 
{} 

Get-ChildItem Function: | %{ 
    $fun = $_.Name 
    try { 
     Get-Help $fun -Functionality TEST* | %{ 
      switch($_.Functionality) { 
       'TEST1' { "$fun is for test 1" } 
       'TEST2' { "$fun is for test 2" } 
      } 
     } 
    } 
    catch {} 
} 

出力:

Do-Something1 is for test 1 
Do-Something2 is for test 2 

おそらく、このアプローチはいくつかのシナリオで有用であるかもしれません。

は、ヘルプのセクションもコメントベースのヘルプキーワードを参照してください:

man about_Comment_Based_Help 

UPDATE 上記の答えが受け入れているが、私はまだそれにはかなり満足していません。間違いなくハッキーではないもう一つのアプローチがあります。それはまた、利点を持って、コメントを参照してください。このアプローチでは、従来の名前で余分な別名を使用します。

# Functions to be used in tests, with any names 
function Do-Something1 { "Something1..." } 
function Do-Something2 { "Something2..." } 

# Aliases that define tests, conventional names are UnitTest-*. 
# Note: one advantage is that an alias can be defined anywhere, 
# right where a function is defined or somewhere else. The latter 
# is suitable in scenarios when we cannot modify the source files 
# (or just do not want to). 
Set-Alias UnitTest-Do-Something1 Do-Something1 
Set-Alias UnitTest-Do-Something2 Do-Something2 

# Get UnitTest-* aliases and extract function names for tests. 
Get-Alias UnitTest-* | Select-Object -ExpandProperty Definition 

# Or we can just invoke aliases themselves. 
Get-Alias UnitTest-* | % { & $_} 
2

コマンドの整理とグループ化は、PowerShellの継続的なジレンマです。常に管理しなければならないものです。ただし、名前を付けるコマンドレットや機能についてのベストプラクティスは、あなたが勤勉であれば動作可能です。おそらく、すべてのコマンドレットが動詞名詞形式になっていることに気づいたでしょう。 IE Get-ProcessSet-Itemなど多くの人々が行うことは、名詞を一緒にグループ化するコマンドに第3の​​部分を追加することです。たとえば、Active Directoryの世界では、get-userではなく、get-aduserとなります。

あなたが行うことができることと、それが最も美しいものではないかもしれないことの1つは、あなたが選んだ2〜3文字のシーケンスでユニットテスト関数に名前を付けることです。ユニットテストのためにUTのような非常にオリジナルのものを選んだとしましょう。あなたの関数は、あなたがすべてのあなたのUTの機能を持っていたら

function Do-UTSomething { "Something was done" } 

は、あなたが行けば少しさらに、またそう

Get-Command *UT* -commandtype function 

のようにそれらを反復処理するには、Get-Commandコマンドレットを使用することができるだろうとそれらをモジュールにパッケージングすると、そのモジュールを使用してモジュールを並べ替えることができます。

Get-Command -module MyUnitTest 

あなたは提案を

help about_modules 
+0

感謝を使用することにより、モジュール上のあらゆる種類の情報を得ることができますが、これは私のポイントではありませんでした。私はすでに名前のコンベンションやマクロセットを作成しています(名前を変更する方法がない場合は、それを使用している他の依存マクロがたくさんあるので) –

関連する問題