2011-01-11 20 views
5

là có thể gán một số thuộc tính siêu dữ liệu cho macro quyền hạn? Tôi có bộ macro và tôi muốn đóng gói chúng thành các nhóm hợp lý. Tôi tưởng tượng cái gì đó như:Thuộc tính Powershell?

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

và sau đó vượt qua tất cả các macro nạp trong thời gian chạy và lọc chúng ra như:

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

tôi sẽ biết ơn sự giúp đỡ nào

Trả lời

5

Thú vị câu hỏi ... Có không có các thuộc tính như vậy của hàm, AFAIK. Nhưng tôi nghĩ rằng có một cách nửa hacky sử dụng các thuộc tính trợ giúp dựa trên nhận xét (có lẽ thậm chí không hacky chút nào nhưng tôi không hoàn toàn chắc chắn).

<# 
.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 {} 
} 

Output:

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

Có lẽ phương pháp này có thể có ích trong một số tình huống.

Xem thêm các từ khóa này giúp phần COMMENT DỰA TRÊN giúp:

man about_Comment_Based_Help 

CẬP NHẬT Mặc dù câu trả lời ở trên được chấp nhận, tôi vẫn không hoàn toàn hài lòng với nó. Đây là một cách tiếp cận khác chắc chắn không phải là hacky. Nó cũng có một lợi thế, xem các ý kiến. Cách tiếp cận này sử dụng bí danh bổ sung với tên thông thường.

# 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

Lệnh tổ chức và nhóm là sự cố đang diễn ra trong PowerShell. Nó là cái gì đó sẽ luôn luôn phải được quản lý. Tuy nhiên, có một số thực hành tốt nhất xung quanh đặt tên lệnh và các hàm có thể hoạt động nếu bạn đang siêng năng. Bạn có thể đã nhận thấy rằng tất cả các lệnh ghép ngắn đều ở định dạng danh từ. IE Get-Process, Set-Item, v.v. Điều mà nhiều người làm là thêm phần thứ ba vào lệnh nhóm các danh từ lại với nhau. Ví dụ: trong thế giới Active Directory, bạn không có get-user, mà là get-aduser.

Một điều bạn có thể làm, và nó có thể không phải là điều đẹp nhất, là đặt tên cho các chức năng kiểm tra đơn vị của bạn với một số chuỗi gồm 2 hoặc 3 ký tự bạn chọn. Hãy nói rằng bạn đã chọn một cái gì đó cực kỳ độc đáo như UT để kiểm tra đơn vị. Chức năng của bạn sau đó sẽ là

function Do-UTSomething { "Something was done" } 

Một khi bạn có tất cả các chức năng UT, bạn có thể sử dụng lệnh Get-Command để lặp qua chúng như vậy

Get-Command *UT* -commandtype function 

Ngoài ra, nếu bạn đi một chút nữa và gói chúng thành một mô-đun, bạn có thể làm tốt hơn và sắp xếp theo mô-đun đó.

Get-Command -module MyUnitTest 

Bạn có thể nhận được tất cả các loại thông tin về module bằng cách sử dụng

help about_modules 
+0

nhờ gợi ý, nhưng đây không phải là quan điểm của tôi. Tôi đã đặt tên cho các tập hợp và tập macro được tạo ra khi không có cách nào để đổi tên chúng (vì có rất nhiều macro phụ thuộc khác đang sử dụng chúng) –

Các vấn đề liên quan