我正在学习一些PowerShell.是否可以看到像Get-ChildItem这样的内置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
Powershell的源代码现在可以在Github上找到.
源代码Get-ChildItem
可以在这里找到.
我想如果你刚刚开始使用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
这将创建一个脚本,显示Get-Process的运行方式.放入要替换Get-Process的任何cmdlet.如果你想谷歌更多关于它,这就是你如何创建代理功能.
对于已编译的Cmdlet,您可以获取.dll
with 的路径:
(Get-Command Get-ChildItem).DLL
(替换Get-ChildItem
为您感兴趣的cmdlet)
一旦你知道了它的路径.dll
,就可以使用像dotPeek这样的.NET反汇编程序打开它:
& dotPeek64.exe (Get-Command Get-ChildItem).DLL