Uczę się niektórych PowerShell. Czy jest możliwe wyświetlenie kodu źródłowego dla wbudowanego polecenia cmdlet, takiego jak Get-ChildItem?Czy widzimy kod źródłowy dla poleceń cmdlet programu PowerShell?
Odpowiedz
Nie wierzę, że kod źródłowy programu PowerShell został kiedykolwiek wydany.
Wątpię, czy to będzie. – alastairs
Mam teraz mniej wątpliwości ... – codekaizen
Istnieje więcej kodu open source (teraz) niż ludzie mogą sobie wyobrazić: [blog Windows PowerShell: moduł Archive jest teraz open-source] (https://blogs.msdn.microsoft. com/powershell/2016/04/25/the-archive-module-is-now-open-source /). –
Powinieneś być w stanie użyć .NET Reflector, aby "zobaczyć" kod źródłowy. Trzeba jednak znać zespół, ale powinien on również być dostępny za pomocą metody GetType lub podobnej.
Ten numer PowerShellLanguage .NET Reflector Add-In może być przydatny.
Sprawdź moją zaktualizowaną odpowiedź, nie musisz znać zestawu! – halr9000
Właściwie najlepiej jest sprawdzić płatność PowerShell Community Extensions. Ten projekt społeczności oprogramowania open source ma "na celu dostarczenie użytecznego zestawu dodatkowych poleceń cmdlet ...". Deweloperzy projektu to PowerShell MVP i znają się na nich.
O ile korzystanie z poleceń cmdlet PowerShell, PowerShell MVP Oisin Grehan wykonał przydatną funkcję zatytułowaną "Reflect-Cmdlet". Nie będę ukraść jego kod i umieścić go tutaj, ale w zasadzie to, co robisz jest:
Get-Command Get-ChildItem | Reflect-Cmdlet
A potem .NET Reflector wyskakuje z prawem montaż otwarte i rozszerzony i wszystko. To naprawdę fajne. Oto zrzut ekranu:
Alt text http://halr9000.com/images/screenshots/reflector.png
Wiem, że to dawno temu, ale zrzut ekranu zniknął. :) Nie ma większego znaczenia, tylko FYI. –
Wygląda, jakby wrócił, po innym długim czasie. – trysis
+1 dla linku do 'Reflect-Cmdlet', było bardzo pomocne. Zmodyfikowany, aby działał z Jetbrains DotPeek. https://gist.github.com/dennisroche/013c5a56d9a7f16851cb – Dennis
polubisz też spojrzeć na Windows Installer PowerShell Snap-In na CodePlex. Jest to mniejszy projekt niż rozszerzenia społeczności, więc łatwiej jest zorientować się, co się dzieje.
Wyjazd Profesjonalne Windows PowerShell Programowanie: SNAPINS, cmdlets, gospodarze i dostawcy (Wrox profesjonalnymi przewodnikami), ISBN: 0470173939 - to jeden z najbardziej przydatnych książek znalazłem na piśmie cmdlets i dostawców.
Złożeń cmdlet PowerShell znajduje się w GAC. Można znaleźć "Get-ChildItem" cmdlet w:
montażu Microsoft.PowerShell.Commands.Management, Microsoft.PowerShell.Commands.GetChildItemCommand klasa.
Użyłem dekompilatora ILSpy .NET i filtrowanych złożeń GAC za pomocą ciągu "powershell". Jak rozumiem, zespoły Microsoft.PowerShell.Commands. *złożeń zawierają wbudowane polecenia cmdlet.
myślę, że jeśli po prostu zaczynając PowerShell, to jest to, czego można się szuka:
$metadata = New-Object system.management.automation.commandmetadata (Get-Command Get-Process)
[System.management.automation.proxycommand]::Create($MetaData) | out-file C:\powershell\get-process.ps1
To będzie utworzyć skrypt, który pokazuje jak Get-Process przebiegów. Wstaw cmdlet, który chcesz zastąpić Get-Process. Jeśli chcesz dowiedzieć się więcej o Google, w ten sposób utworzysz funkcję proxy.
Ładne i proste, nie ma potrzeby korzystania z Reflector.NET lub DotPeek, okrzyki. Nawiasem mówiąc, "[System.management.automation.proxycommand] :: Create ($ MetaData)" wydaje mi się wystarczające, aby wyświetlić wyniki na ekranie. –
Spowoduje to utworzenie polecenia [proxy] (http://blogs.msdn.com/b/powershell/archive/2009/01/04/extending-and-or-modifing-commands-with-proxies.aspx), które nie jest dostępne To samo, co w ogóle spojrzenie na kod źródłowy. To nie daje kodu źródłowego dla procesu Get-Process ani nie pokazuje, jak działa; zwraca skrypt bazowy, którego można użyć do zmodyfikowania polecenia cmdlet, na przykład poprzez dodanie do niego dodatkowych parametrów. –
kredyt http://windowsitpro.com/blog/powershell-proxy-functions – Djarid
Niektóre kod można znaleźć na witrynie: Reference Zasobami http://referencesource.microsoft.com/#System.Management.Automation/System/Management/Automation/ChildItemCmdletProviderIntrinsics.cs,c6eed9f6a5417c19
Daje tylko zarys chociaż; nie szczegóły kodu.
Dla zebranych poleceń cmdlet, można uzyskać ścieżkę do .dll
z:
(Get-Command Get-ChildItem).DLL
(Wymień Get-ChildItem
z cmdletu jesteś zainteresowany)
Gdy wiesz ścieżkę do .dll
, ty można go otworzyć z disassembler .NET jak dotPeek:
& dotPeek64.exe (Get-Command Get-ChildItem).DLL
The source for Powershell is now available on Github.
Źródło dla Get-ChildItem
można znaleźć here.
Co stanie się, gdy odpowiedź na pytanie zmieni się z "nie" na "tak"? –
@GeekyI Przypuszczalnie OP (oryginalny plakat) powinien zaakceptować nową odpowiedź zamiast poprzednio zaakceptowanej odpowiedzi. Ale OP nigdy nie przyjął odpowiedzi, ani nie ma aktywnego profilu, więc przypuszczam, że nie ma to większego znaczenia. –
Zgadzam się, myślę, że przyjmij tę odpowiedź. –
- 1. Jak zaimportować nowe polecenie cmdlet programu powershell?
- 2. Obsługa Get-Help dla niestandardowego cmdlet PowerShell
- 3. Wywoływanie poleceń cmdlet powershell z pliku wsadowego Windows
- 4. Zakończono zakończenie wartości parametru cmdlet PowerShell:
- 5. Jak korzystać z parametru "-Property" dla polecenia cmdlet programu PowerShell "Measure-Object"?
- 6. Parametr powershell wartość domyślna (cmdlet C#)
- 7. W niestandardowym C# PowerShell Cmdlet Identyfikowanie, czy określono opcję -Verbose
- 8. Jak przekonwertować plik .cs na cmdlet PowerShell?
- 9. Powershell - Uzyskaj zmienną z C# Cmdlet
- 10. Czy Matlab może generować kod źródłowy Java?
- 11. App kod źródłowy Inventor
- 12. Czy mogę napisać cmdlet binarny PowerShell z .NET Core?
- 13. Gdzie mogę znaleźć kod źródłowy dla WebMatrix.WebData.WebSecurity
- 14. Czy dostępny jest kod źródłowy dostępnych metod?
- 15. Kod źródłowy Pythona dla wbudowanego operatora "in"
- 16. Kod źródłowy Java - Process.destroy() dla Linuksa
- 17. Kod źródłowy beautifier dla C++ (vC++)?
- 18. pokaż kod źródłowy dla funkcji w R
- 19. Czy dostępny jest kod źródłowy dla dostawcy uniwersalnego członkostwa (System.Web.Providers)?
- 20. Kod źródłowy dla klas biblioteki Java
- 21. Kod źródłowy biblioteki C
- 22. Ruby, kod źródłowy Splat?
- 23. SyntaxHighlighter v3.0.83 kod źródłowy
- 24. Czy można wyświetlić kod źródłowy aplikacji iPhone?
- 25. Organizowanie R Kod źródłowy
- 26. Latex + kod źródłowy importu
- 27. Kod źródłowy API Java
- 28. Naprawdę użyteczny kod źródłowy VB6
- 29. PowerShell równoważne dla cURL przesyłanego pliku poleceń
- 30. Wyświetl kod źródłowy w R
Pliki binarne nie są .NET, więc odbicie jest prawidłowe. – Will
Co? Nie, to głupie. Zaktualizuję mój odpowiednik, dodając kilka refleksji. – halr9000
Możesz teraz - https://github.com/PowerShell/PowerShell/blob/HEAD/src/Microsoft.PowerShell.Commands.Management/commands/management/GetChildrenCommand.cs. – codekaizen