Tôi đang học một số PowerShell. Có thể xem mã nguồn cho lệnh ghép ngắn tích hợp như Get-ChildItem không?Chúng ta có thể thấy mã nguồn cho lệnh ghép ngắn PowerShell không?
Trả lời
Tôi không tin rằng mã nguồn cho PowerShell đã từng được phát hành.
Tôi nghi ngờ nó sẽ là một trong hai. – alastairs
Tôi ít nghi ngờ những ngày này ... – codekaizen
Hiện có nhiều mã nguồn mở hơn (bây giờ) hơn mọi người có thể tưởng tượng: [Windows PowerShell blog: Mô-đun lưu trữ giờ đây là mã nguồn mở] (https://blogs.msdn.microsoft. com/powershell/2016/04/25/the-archive-module-là-now-open-source /). –
Bạn sẽ có thể sử dụng .NET Reflector để "xem" mã nguồn. Bạn cần phải biết lắp ráp, mặc dù nó cũng có thể truy cập bằng phương thức GetType hoặc tương tự.
Điều này có nghĩa là PowerShellLanguage .NET Reflector Add-In có thể hữu ích.
kiểm tra câu trả lời cập nhật của tôi, bạn không cần phải biết lắp ráp! – halr9000
Thực ra, đặt cược tốt nhất của bạn là đi kiểm tra PowerShell Community Extensions. Dự án cộng đồng phần mềm mã nguồn mở này là "nhằm cung cấp một tập hợp các lệnh ghép ngắn hữu ích rộng rãi hơn ...". Các nhà phát triển trên dự án là PowerShell MVPs và biết công cụ của họ.
Khi sử dụng phản ánh trên các lệnh ghép ngắn PowerShell hiện có, PowerShell MVP Oisin Grehan đã thực hiện một chức năng tiện dụng có tiêu đề "Reflect-Cmdlet". Tôi sẽ không ăn cắp mã của mình và đặt nó ở đây, nhưng về cơ bản những gì bạn làm là:
Get-Command Get-ChildItem | Reflect-Cmdlet
Và sau đó .NET Reflector bật lên với việc lắp ráp đúng mở ra và mở rộng và tất cả mọi thứ. Nó thực sự khá tuyệt. Dưới đây là một ảnh chụp màn hình:
Alt text http://halr9000.com/images/screenshots/reflector.png
Tôi biết điều này là một thời gian dài trước đây, nhưng ảnh chụp màn hình đã biến mất. :) Không quan trọng lắm, chỉ là FYI. –
Có vẻ như nó đã trở lại, sau một thời gian dài. – trysis
+1 cho liên kết đến 'Reflect-Cmdlet', nó rất hữu ích. Sửa đổi để làm cho nó hoạt động với Jetbrains DotPeek. https://gist.github.com/dennisroche/013c5a56d9a7f16851cb – Dennis
Bạn cũng có thể muốn có một cái nhìn tại Windows Installer PowerShell Snap-In trên CodePlex. Đó là một dự án nhỏ hơn so với các phần mở rộng của cộng đồng, vì vậy nó dễ dàng hơn để có được đầu của bạn xung quanh những gì đang xảy ra.
Check-out Professional Windows PowerShell Lập trình: Snapin, Cmdlets, máy chủ và các nhà cung cấp (Wrox Professional Guides), ISBN: 0470173939 - đó là một trong những cuốn sách hữu ích nhất mà tôi đã tìm thấy để viết lệnh và các nhà cung cấp.
Hội đồng ghép ngắn PowerShell được đặt trong GAC. Bạn có thể tìm thấy lệnh ghép ngắn "Get-ChildItem" trong:
Microsoft.PowerShell.Commands.GetChildItemCommand lớp.
Tôi đã sử dụng trình giải mã ILSpy .NET và bộ lọc GAC được lọc theo chuỗi "powershell". Theo tôi hiểu, Microsoft.PowerShell.Commands. * hội đồng có chứa các lệnh ghép ngắn được cài sẵn.
Tôi nghĩ rằng nếu bạn chỉ mới bắt đầu PowerShell, đây là những gì bạn muốn được tìm kiếm:
$metadata = New-Object system.management.automation.commandmetadata (Get-Command Get-Process)
[System.management.automation.proxycommand]::Create($MetaData) | out-file C:\powershell\get-process.ps1
này sẽ tạo ra một kịch bản trong đó cho thấy cách Get-Process chạy. Đặt trong bất kỳ lệnh ghép ngắn nào bạn muốn thay thế Get-Process. Nếu bạn muốn google thêm về nó, đây là cách bạn sẽ tạo ra một chức năng proxy.
Đẹp và đơn giản, không cần Reflector.NET hoặc DotPeek, cổ vũ. Nhân tiện, '[System.management.automation.proxycommand] :: Tạo ($ MetaData)' dường như đủ cho tôi, để chỉ hiển thị kết quả trên màn hình. –
Điều này tạo ra một [lệnh proxy] (http://blogs.msdn.com/b/powershell/archive/2009/01/04/extending-and-or-modifing-commands-with-proxies.aspx), mà isn không giống như nhìn vào mã nguồn. Điều này không cung cấp cho bạn mã nguồn để Nhận quy trình hoặc chỉ cho bạn cách chạy; nó trả về một kịch bản cơ sở mà bạn có thể sử dụng để sửa đổi lệnh ghép ngắn, ví dụ, bằng cách thêm các tham số bổ sung vào nó. –
tín dụng http://windowsitpro.com/blog/powershell-proxy-functions – Djarid
Một số mã có thể được tìm thấy trên trang web tài nguyên tham khảo: http://referencesource.microsoft.com/#System.Management.Automation/System/Management/Automation/ChildItemCmdletProviderIntrinsics.cs,c6eed9f6a5417c19
này chỉ cung cấp cho các phác thảo mặc dù; không phải chi tiết của mã.
Đối Cmdlets biên soạn, bạn có thể lấy đường dẫn đến .dll
với:
(Get-Command Get-ChildItem).DLL
(Thay thế Get-ChildItem
với cmdlet bạn quan tâm)
Một khi bạn biết đường dẫn đến .dll
, bạn có thể mở bằng trình tách rời .NET như dotPeek:
& dotPeek64.exe (Get-Command Get-ChildItem).DLL
The source for Powershell is now available on Github.
Nguồn cho Get-ChildItem
có thể được tìm thấy here.
Điều gì sẽ xảy ra khi câu trả lời của câu hỏi thay đổi từ "không" thành "có"? –
@GeekyI Có lẽ OP (poster gốc) phải chấp nhận câu trả lời mới, thay vì câu trả lời được chấp nhận trước đó. Nhưng OP chưa bao giờ chấp nhận một câu trả lời nào, cũng như anh ta không có một hồ sơ tích cực, vì vậy tôi cho rằng nó không quan trọng nhiều. –
Tôi đồng ý, tôi nghĩ chấp nhận câu trả lời này. –
- 1. Gọi lệnh ghép ngắn powershell từ C#
- 2. Lệnh ghép ngắn PowerShell là gì?
- 3. PowerShell - động từ nào sử dụng cho lệnh ghép ngắn?
- 4. Làm cách nào để nhập lệnh ghép ngắn PowerShell mới?
- 5. Có cách nào để kết quả từ vựng của lệnh ghép ngắn Powershell không?
- 6. Có thể chia sẻ các thuộc tính và nhận xét giữa các lệnh ghép ngắn Powershell trong C# không?
- 7. Cách viết trợ giúp Powershell cho các lệnh ghép ngắn của tôi
- 8. Mở khóa tài khoản bị khóa bằng PowerShell (không phải với lệnh ghép ngắn Quest AD)
- 9. Giá trị 'Chế độ' có thể được trả về bằng lệnh ghép ngắn Get-ChildItem của PowerShell là gì?
- 10. Nếu chúng ta không thể ràng buộc một lệnh của MouseBinding, chúng ta phải làm gì?
- 11. Lệnh ghép ngắn PowerShell hiển thị thuộc tính, nhưng nó không thể hiển thị nó thông qua 'chọn'
- 12. Làm thế nào để tìm ra đường dẫn DLL của một lệnh ghép ngắn PowerShell
- 13. Làm thế nào để chuyển đổi tệp .cs sang lệnh ghép ngắn PowerShell?
- 14. Tệp Powershell ps1 "không được nhận dạng dưới dạng lệnh ghép ngắn, chức năng, chương trình có thể hoạt động hoặc tệp tập lệnh."
- 15. Tại sao chúng ta nên sử dụng mã hóa ui khi chúng ta có Specflow?
- 16. Có cách nào để ngăn chặn đầu ra "thêm" từ lệnh ghép ngắn Write-Error không?
- 17. Làm thế nào để sử dụng tham số "-Property" cho lệnh ghép ngắn "Measure-Object" của PowerShell?
- 18. Làm cách nào để thêm lệnh ghép ngắn PowerShell hoặc chức năng vào máy của tôi để luôn có sẵn?
- 19. Cụm từ '' không được công nhận là tên của lệnh ghép ngắn,
- 20. Có thư viện nào cho urllib2 cho python mà chúng ta có thể tải xuống không?
- 21. Lệnh ghép ngắn Invoke-Item có thể khởi chạy một tệp thực thi với các tham số không?
- 22. Chúng ta có thể viết macro trong C# cho Excel
- 23. Lệnh ghép ngắn Azure Powershell cho 1,7, tháng 6 năm 2012: Điều gì đã xảy ra với Get-OperationStatus?
- 24. chúng ta có thể sử dụng xpath với BeautifulSoup không?
- 25. Chúng ta có thể lấy kiểu đối số lambda không?
- 26. Chúng ta có thể phân phối lại Oracle tools.jar không?
- 27. Tất cả các mã ngắn cho lệnh svn là gì?
- 28. chúng ta có thể chèn vào hai bảng với câu lệnh sql đơn không?
- 29. Làm cách nào chúng ta có thể chạy lệnh tùy chỉnh trong nhật thực?
- 30. Tại sao chúng ta không thể tạo đối tượng ostream của chúng ta
Các tệp nhị phân không phải là .NET. Vì vậy, việc phản chiếu là đúng. – Will
Cái gì? Không, đó là ngớ ngẩn. Tôi sẽ cập nhật trả lời của tôi với một số công cụ phản ánh. – halr9000
Bây giờ bạn có thể - https://github.com/PowerShell/PowerShell/blob/HEAD/src/Microsoft.PowerShell.Commands.Management/commands/management/GetChildrenCommand.cs. – codekaizen