Tôi có một tập hợp lớn các hàm được định nghĩa trong mô-đun tập lệnh PowerShell. Tôi muốn sử dụng Export-ModuleMember -Function *
, nhưng tôi muốn loại trừ chỉ một chức năng. Nó sẽ dễ dàng hơn cho tôi để loại trừ một chức năng này hơn là liệt kê tất cả các hàm được bao gồm. Có bất kì cách nào để đạt được điều này không?Tôi có thể loại trừ một chức năng đơn lẻ khỏi Export-ModuleMember không?
Trả lời
Câu trả lời của tôi về chức năng loại trừ là sử dụng cách đặt tên danh từ cho các chức năng tôi muốn xuất và sử dụng mũ ban đầu cho mọi thứ khác.
Sau đó, Export-ModuleMember -function *-*
sẽ xử lý.
Tìm tất cả các chức năng trong một kịch bản và sau đó lọc dựa trên những gì bạn muốn loại trừ (giả sử PowerShell v2):
$errors = $null
$functions = [system.management.automation.psparser]::Tokenize($psISE.CurrentFile.Editor.Text, [ref]$errors) `
| ?{(($_.Content -Eq "Function") -or ($_.Content -eq "Filter")) -and $_.Type -eq "Keyword" } `
| Select-Object @{"Name"="FunctionName"; "Expression"={
$psISE.CurrentFile.Editor.Select($_.StartLine,$_.EndColumn+1,$_.StartLine,$psISE.CurrentFile.Editor.GetLineLength($_.StartLine))
$psISE.CurrentFile.Editor.SelectedText
}
}
Đây là kỹ thuật tôi sử dụng cho v2 để tạo ra một ISE Function Explorer. Tuy nhiên, tôi không thấy lý do tại sao điều này sẽ không hoạt động với văn bản thuần bên ngoài ISE. Bạn cần phải giải quyết các chi tiết dòng chú ý. Đây chỉ là một ví dụ về cách đạt được những gì bạn muốn.
Bây giờ, hãy lọc những gì không được yêu cầu và gửi đường ống này đến Export-ModuleMember
!
$functions | ?{ $_.FunctionName -ne "your-excluded-function" }
Nếu bạn đang sử dụng PowerShell v3, parser makes it a lot easier.
Giải pháp của tôi, sử dụng PowerShell V3, như ám bởi ravikanth (người đã sử dụng V2 trong giải pháp của mình), là xác định một mô-đun PSParser
:
Add-Type -Path "${env:ProgramFiles(x86)}\Reference Assemblies\Microsoft\WindowsPowerShell\3.0\System.Management.Automation.dll"
Function Get-PSFunctionNames([string]$Path) {
$ast = [System.Management.Automation.Language.Parser]::ParseFile($Path, [ref]$null, [ref]$null)
$functionDefAsts = $ast.FindAll({ $args[0] -is [System.Management.Automation.Language.FunctionDefinitionAst] }, $true)
$functionDefAsts | ForEach-Object { $_.Name }
}
Export-ModuleMember -Function '*'
Và trong một module, nếu tôi muốn loại trừ một được chức năng, dòng cuối cùng sẽ như thế nào:
Export-ModuleMember -Function ((Get-PSFunctionNames $PSCommandPath) | Where { $_ -ne 'MyPrivateFunction' })
Lưu ý rằng điều này sẽ chỉ làm việc trong PowerShell V3 hay muộn vì phân tích cú pháp AST và $PSCommandPath
đã được giới thiệu trong phiên bản 3.
- 1. Tôi có thể chuyển mẫu vào một chức năng không?
- 2. Có thể thả một tệp đơn lẻ ra khỏi git stash không?
- 3. Xóa ký tự đơn lẻ khỏi chuỗi?
- 4. Tôi có thể có nhiều tệp web.config trong một dự án web đơn lẻ không?
- 5. Các tệp dự án Xcode nào tôi có thể 'loại trừ' khỏi repo git của mình?
- 6. tar loại trừ các tệp/thư mục đơn lẻ, không phải mẫu
- 7. Tôi có thể đưa chức năng vào bên trong một chức năng khác không?
- 8. Tôi có thể chạy nhiều hơn một JVM trên PC đơn lẻ của mình không?
- 9. Xóa một đối tượng đơn lẻ khỏi đối tượng Javascript
- 10. Có thể loại trừ toàn bộ không gian tên khỏi phân tích NDepend không?
- 11. SQL không phải là một chức năng nhóm đơn nhóm
- 12. Chức năng không có loại ngầm
- 13. Tôi có thể loại trừ một nút bấm bên trong một sự kiện nhấp TR không?
- 14. Loại trừ các tệp khỏi git-diff
- 15. Vim: Làm cách nào để loại trừ toàn bộ một từ khỏi tìm kiếm của tôi?
- 16. Nhiều chức năng trên một sự kiện đơn lẻ với JQuery/Javascript
- 17. GHCi có thể cho tôi biết loại chức năng Haskell cục bộ không?
- 18. Thuật toán đơn giản nhất để thoát khỏi một ký tự đơn lẻ là gì?
- 19. Tôi có thể tạm ngưng chức năng iScroll không?
- 20. Có thể loại trừ plugin grails khỏi môi trường sản xuất không?
- 21. Phân loại đơn lẻ trong Weka
- 22. Tôi có thể viết cùng một chức năng cho 2 phần tử id trong một chức năng nhấp không?
- 23. Cách loại trừ các bảng khỏi sp_msforeachtable
- 24. Loại trừ thư mục khỏi phân tích
- 25. Loại trừ tệp khỏi kiểm tra stylecop
- 26. Có thể xóa các giá trị riêng lẻ khỏi phần tử nhập nhiều tệp không?
- 27. SQL - loại trừ một cột khỏi truy vấn SELECT
- 28. Loại trừ thư mục khỏi htaccess
- 29. OCaml: Có chức năng nào có loại 'a ->' khác với chức năng nhận dạng không?
- 30. Muốn loại trừ tệp khỏi "git diff"
Sự đơn giản và quy ước của câu trả lời này thực sự nói với tôi! –