2010-05-05 37 views
7

Đây có thể là một câu hỏi ngu ngốc, nhưng là bí danh mặc định (ví dụ: cd) được mã hóa cứng trong PowerShell hoặc được xác định trong tập lệnh "tiểu sử" ẩn ở đâu đó?Các bí danh mặc định được xác định trong PowerShell ở đâu?

Tôi không có bất kỳ hồ sơ nào được đặt (cho mỗi người dùng hoặc toàn hệ thống) vì vậy tôi chỉ tự hỏi những nơi mặc định đến từ đâu.

Trả lời

10

Chúng được "tích hợp sẵn" nhưng không thay đổi. Lưu ý:

 
PS > (Get-Alias dir).Options 
AllScope 
PS > (Get-Alias gci).Options 
ReadOnly, AllScope

PS > Get-Alias | group Options

Count Name Group ----- ---- ----- 91 ReadOnly, AllScope {%, ?, ac, asnp...} 46 AllScope {cat, cd, chdir, clear...}

Như bạn thấy, có một số phân vùng bí danh bởi tùy chọn ReadOnly. Các số ReadOnly là thành ngữ trong PowerShell, trong khi những cái có thể thay đổi được dành cho những người quen thuộc với các trình bao khác. Tôi đã thấy mọi người sửa đổi dir để thêm nhiều chức năng hơn, trong khi vẫn giữ gci làm bí danh thẳng cho Get-ChildItem.

Để có khả năng tương thích rộng, tôi chỉ sử dụng các bí danh ReadOnly trong tập lệnh của mình.

Ngoài ra, vì dir trong CMD, ls trong UNIX và gci trong PowerShell, mỗi cách hoạt động theo cách riêng của chúng, tôi tự rèn luyện bản thân để sử dụng lệnh gốc chứ không phải bí danh. dir có xu hướng hoạt động ở mọi nơi, nhưng dir -Recurse thì không!

Như một bài tập huấn luyện, và để kiểm tra kịch bản của tôi cho khả năng tương thích, đôi khi tôi loại bỏ các phi ReadOnly bí danh:

Get-Alias | ? { ! ($_.Options -match "ReadOnly") } | % { Remove-Item alias:$_ } 

Có một cách tiếp cận nhẹ nhàng hơn nơi bạn thay thế mỗi bí danh với một lệnh mới mà cảnh báo bạn bạn đang sử dụng một trong các bí danh tương thích, nhưng cho phép bạn tiếp tục hoạt động.

Ngoài ra, bạn có thể thay đổi ReadOnly bí danh nếu bạn thực sự muốn, nhưng vì những lý do trên tôi khuyên bạn nên chống lại nó:

 
PS > Set-Alias -Name sl -Value Get-ChildItem -Force -Option AllScope  # BAD! 
PS > sl

Directory: C:\Users\Jay

Mode LastWriteTime Length Name ---- ------------- ------ ----

+1

Cảm ơn bạn (và những người khác nữa) cho một lời giải thích tuyệt vời! – Xerion

+1

Trên thực tế, phần bạn dán nhãn là '# BAD! 'Chính là thứ tôi đang đập đầu vào tường cố gắng tìm ra cách để làm - ghi đè lên một bí danh ReadOnly. Tôi đã thực sự cố gắng ** - Force ** và ** - Option AllScope ** một cách riêng biệt, và tất nhiên không ai làm việc. Vì một lý do nào đó nó không xảy ra với tôi rằng mỗi một địa chỉ một trở ngại khác nhau, cả hai đều áp dụng cho các bí danh ReadOnly, vì vậy họ cần phải được sử dụng cùng nhau ... duh! –

+0

Nếu bạn phải biết, tôi muốn bí danh ** sl ** to ** Push-Location ** để tôi có thể thay đổi hành vi mà không thay đổi thói quen của mình. Nó cũng có thể hữu ích để có một tham chiếu bí danh được xây dựng trong một lệnh proxy của lệnh mà nó thường tham chiếu. Một lần nữa, để thay đổi hành vi của lệnh mà không thay đổi thói quen của bạn. Vì vậy ... nó không nhất thiết phải luôn luôn '# BAD! '.;) –

1

Mặc dù tôi không biết chi tiết kỹ thuật nhưng tôi cho rằng chúng được mã hóa cứng và chúng không thể định cấu hình được. Chúng có thể được xác định lại hoặc loại bỏ nhưng tập hợp ban đầu không nằm trong tầm kiểm soát của chúng tôi.

+0

Đó là một điều tốt, IMHO. – Joey

0

Họ là cứng.

6

hardcoded, nhưng có thể phục hồi (như hầu hết mọi thứ "ẩn" trong PowerShell)

PS> [Management.Automation.Runspaces.InitialSessionState].getproperty(
     "BuiltInAliases", [reflection.bindingflags]"NonPublic,Static").getvalue(
      $null, @()) | format-table -auto 

Definition   Description   Options CommandType Visibility Name PSSnapIn Module 
----------   -----------   ------- ----------- ---------- ---- -------- ------ 
Add-Content      ReadOnly, AllScope  Alias  Public ac 
Add-PSSnapIn      ReadOnly, AllScope  Alias  Public asnp 
Clear-Content     ReadOnly, AllScope  Alias  Public clc 
Clear-Item      ReadOnly, AllScope  Alias  Public cli 
Clear-ItemProperty    ReadOnly, AllScope  Alias  Public clp 
Clear-Variable     ReadOnly, AllScope  Alias  Public clv 
... 

;-)

+2

get-alias hoạt động quá tất nhiên, nhưng mã trên là dứt khoát bất kể các module khác/snapins thêm của riêng mình vào hỗn hợp. – x0n

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