windows - win10 - 我們能看到PowerShell cmdlet的源代碼嗎?




windows powershell是什麼 (6)

我正在學習一些PowerShell。 是否可以看到像Get-ChildItem這樣的內置cmdlet的源代碼?


PowerShell cmdlet的程序集位於GAC中。 您可以在以下位置找到“Get-ChildItem”cmdlet:

Microsoft.PowerShell.Commands.Management程序集,Microsoft.PowerShell.Commands.GetChildItemCommand類。

我使用了ILSpy .NET反編譯器並通過“powershell”字符串過濾了GAC程序集。 據我了解, Microsoft.PowerShell.Commands。*程序集包含內置cmdlet。



實際上,最好的辦法是去看看PowerShell Community Extensions 。 這個開源軟件社區項目“旨在提供一組廣泛使用的附加cmdlet ......”。 該項目的開發人員是PowerShell MVP並且知道他們的東西。

至於在現有的PowerShell cmdlet上使用反射,PowerShell MVP Oisin Grehan做了一個名為“ Reflect-Cmdlet ”的方便功能。 我不會竊取他的代碼並把它放在這裡,但基本上你做的是:

Get-Command Get-ChildItem | Reflect-Cmdlet

然後彈出.NET Reflector ,打開並擴展了正確的程序集。 這真的很酷。 這是一個截圖:

替換文字http://halr9000.com/images/screenshots/reflector.png


對於已編譯的Cmdlet,您可以使用以下命令獲取.dll的路徑:

(Get-Command Get-ChildItem).DLL

(將Get-ChildItem替換為您感興趣的cmdlet)

一旦你知道.dll的路徑,就可以使用像dotPeek這樣的.NET反彙編程序打開它:

& dotPeek64.exe (Get-Command Get-ChildItem).DLL


我不相信PowerShell的源代碼曾經發布過。





cmdlets