我们能看到PowerShell cmdlet的源代码吗?

31 windows powershell cmdlets

我正在学习一些PowerShell.是否可以看到像Get-ChildItem这样的内置cmdlet的源代码?

hal*_*000 21

实际上,最好的办法是去看看PowerShell Community Extensions.这个开源软件社区项目"旨在提供一组广泛使用的附加cmdlet ......".该项目的开发人员是PowerShell MVP并且知道他们的东西.

至于在现有PowerShell cmdlet上使用反射,PowerShell MVP Oisin Grehan做了一个名为" Reflect-Cmdlet " 的方便功能.我不会窃取他的代码并将其放在这里,但基本上你所做的是:

Get-Command Get-ChildItem | Reflect-Cmdlet
Run Code Online (Sandbox Code Playgroud)

然后弹出.NET Reflector,打开并扩展了正确的程序集.这真的很酷.这是一个截图:

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

  • 链接到"Reflect-Cmdlet"的+1,非常有帮助.修改后使其与Jetbrains DotPeek配合使用.https://gist.github.com/dennisroche/013c5a56d9a7f16851cb (5认同)

Imp*_*qui 10

我想如果你刚刚开始使用PowerShell,这就是你要找的东西:

$metadata = New-Object system.management.automation.commandmetadata (Get-Command Get-Process)
[System.management.automation.proxycommand]::Create($MetaData) | out-file C:\powershell\get-process.ps1
Run Code Online (Sandbox Code Playgroud)

这将创建一个脚本,显示Get-Process的运行方式.放入要替换Get-Process的任何cmdlet.如果你想谷歌更多关于它,这就是你如何创建代理功能.

  • 这会创建一个[代理命令](http://blogs.msdn.com/b/powershell/archive/2009/01/04/extending-and-or-modifing-commands-with-proxies.aspx),这不是'与查看源代码完全相同.这不会为您提供Get-Process的源代码,也不会向您展示它是如何运行的; 它返回一个可用于修改cmdlet的基本脚本,例如,通过向其添加其他参数. (5认同)

Mic*_*pat 5

对于已编译的Cmdlet,您可以获取.dllwith 的路径:

(Get-Command Get-ChildItem).DLL
Run Code Online (Sandbox Code Playgroud)

(替换Get-ChildItem为您感兴趣的cmdlet)

一旦你知道了它的路径.dll,就可以使用像dotPeek这样的.NET反汇编程序打开它:

& dotPeek64.exe (Get-Command Get-ChildItem).DLL
Run Code Online (Sandbox Code Playgroud)


EBG*_*een -1

我不相信 PowerShell 的源代码曾经被发布过。

  • @codekaizen [Powershell 现已开源](https://github.com/PowerShell/PowerShell)。 (3认同)