2009-12-30 27 views
11

bước để tái sản xuất:Không thể tạo một bí danh PowerShell trong một mô-đun kịch bản

Tạo một module TestAlias ​​trong \ WindowsPowerShell \ Modules \ TestAlias ​​\ TestAlias.psm1 với chức năng sau đây và bí danh:

function foo 
{ write-output 'foo' } 


New-Alias -name bar -value foo 

từ một phiên PowerShell:

import-module TestAlias 
bar 

Thuật ngữ 'bar' không được công nhận là tên của một lệnh, chức năng, kịch bản fil e, hoặc chương trình có thể hoạt động ...

Trả lời

9

Sử dụng Export-ModuleMember trong file PSM1 xuất khẩu Alias ​​

Export-ModuleMember -function foo -Alias bar 
11

Bạn có thể sử dụng

Export-ModuleMember -Function * -Alias * 

để xuất khẩu tất cả các chức năng và bí danh.

Theo mặc định, mô-đun Windows PowerShell chỉ xuất các lệnh (hàm hoặc cmdletS), chứ không phải các biến hoặc bí danh.

Tôi sẽ đi vào chi tiết hơn một chút về lý do tại sao điều này xảy ra.

Câu trả lời ngắn gọn là các bí danh, trong khi thuận tiện khi viết một lớp lót, là rào cản đối với việc hiểu tập lệnh hoặc mô-đun. Họ đang đóng băng trên bánh của một lệnh ghép ngắn tốt, nhưng điều cốt lõi để lộ ra là lệnh ghép ngắn tốt. Bí danh khiến người dùng đọc kịch bản của bạn khó khăn hơn để tìm ra những gì bạn đang cố gắng làm (Set-Content dễ hiểu hơn nhiều so với sc). Biến có thể còn tồi tệ hơn để lộ ra, vì chúng có thể dễ dàng được đặt thành các giá trị không mong muốn và vì có rất ít để giúp người dùng mô-đun của bạn tìm ra rằng họ đang ở đó. Bởi vì các lệnh có thể dễ dàng phát hiện được (Get-Command -Module FOO) và dễ khám phá hơn (với Get-Help), mặc định là một mô-đun sẽ xuất chỉ là các lệnh. Giống như hầu hết những thứ khác trong PowerShell, bạn có thể ghi đè lên nó nếu bạn chọn, nhưng theo các lệnh mặc định là thứ duy nhất được xuất từ ​​một mô-đun.

Hy vọng điều này sẽ giúp

+0

Tôi đồng ý với quan điểm của bạn về bí danh làm cho tập lệnh khó hiểu hơn. Tôi không thích xem các bài đăng trên blog bằng% và? Thông thường tôi sẽ không sử dụng bí danh với các mô-đun, tuy nhiên tôi có một thư viện chức năng Powershell V1 hiện có mà tôi đã chuyển đổi thành một mô-đun V2 và tôi cần thay đổi một vài tên hàm để hỗ trợ làm một số riêng. Vì vậy, bất kỳ kịch bản cũ dựa trên các chức năng không phá vỡ tôi tạo ra alaises trong mô-đun. –

+0

Điểm chính của bí danh trong các mô-đun là cho phép các động từ tự nhiên với tên miền khác với các động từ có thể phát hiện thông thường. – Chriseyre2000

+2

Trên thực tế đây là lý do mà bí danh không cảnh báo về quy ước đặt tên, không phải là "điểm chính". Nhóm IIS đã xuất các lệnh ghép ngắn không phù hợp với quy ước và chúng phải được đặt bí danh cho khả năng tương thích được cho phép. Việc sử dụng các bí danh này để phá vỡ quy ước đặt tên là rất không được khuyến khích, nhưng được nhìn thấy một cách rộng rãi (F5, AWS và FIM). Hãy tin tôi vào các câu hỏi "điểm": Tôi đã làm việc trên hầu hết các hướng dẫn trong khi trên nhóm PowerShell @ Microsoft. –

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