Estoy aprendiendo algo de PowerShell. ¿Es posible ver el código fuente de un cmdlet integrado como Get-ChildItem?¿Podemos ver el código fuente de los cmdlets de PowerShell?
Respuesta
No creo que el código fuente de PowerShell haya sido lanzado alguna vez.
Dudo que sea, tampoco. – alastairs
Tengo menos dudas estos días ... – codekaizen
Hay más código fuente abierto (ahora) de lo que la gente podría imaginar: [Blog de Windows PowerShell: El módulo de Archivo ahora es de código abierto] (https://blogs.msdn.microsoft. com/powershell/2016/04/25/the-archive-module-is-now-open-source /). –
Debería poder usar .NET Reflector para "ver" el código fuente. Sin embargo, debe conocer el ensamblaje, pero también debe ser accesible utilizando el método GetType o similar.
Esto PowerShellLanguage .NET Reflector Add-In puede ser útil.
echa un vistazo a mi respuesta actualizada, ¡no necesita saber el montaje! – halr9000
En realidad, su mejor opción es ir a PowerShell Community Extensions. Este proyecto de comunidad de software de código abierto está "destinado a proporcionar un conjunto de cmdlets adicionales ampliamente útil ...". Los desarrolladores del proyecto son los MVP de PowerShell y saben lo que hacen.
En cuanto a la reflexión sobre los cmdlets PowerShell existentes, PowerShell MVP Oisin Grehan realizó una práctica función titulada "Reflect-Cmdlet". No voy a robar su código y lo coloco aquí, pero básicamente lo que se hace es:
Get-Command Get-ChildItem | Reflect-Cmdlet
Y luego .NET Reflector aparece con el conjunto de la derecha se abrió y se expandió y todo. Es realmente genial. Aquí hay una captura de pantalla:
Alt text http://halr9000.com/images/screenshots/reflector.png
Sé que esto fue hace mucho tiempo, pero la captura de pantalla se ha ido. :) No importa mucho, solo para tu información. –
Parece que está de vuelta, después de otro largo tiempo. – trysis
+1 para el enlace a 'Reflect-Cmdlet', fue muy útil. Modificado para que funcione con Jetbrains DotPeek. https://gist.github.com/dennisroche/013c5a56d9a7f16851cb – Dennis
También te a echar un vistazo a Windows Installer PowerShell Snap-In en CodePlex. Es un proyecto más pequeño que las extensiones de la comunidad, por lo que es más fácil entender lo que está sucediendo.
Salida profesionales de Windows PowerShell Programación: SnapIns, cmdlets, anfitriones y proveedores (Wrox guías profesionales), ISBN: 0470173939 - es uno de los libros más útiles que he encontrado para cmdlets y proveedores de escritura.
Los ensambles de cmdlets de PowerShell se encuentran en GAC. Puede encontrar "Get-ChildItem" cmdlet:
montaje Microsoft.PowerShell.Commands.Management, Microsoft.PowerShell.Commands.GetChildItemCommand clase.
He utilizado el descompilador .NET de .NET y los conjuntos de GAC filtrados por la cadena "powershell". Según tengo entendido, Microsoft.PowerShell.Commands. * ensambles contienen cmdlets integrados.
creo que si se acaba de empezar PowerShell, esto es lo que se está buscando:
$metadata = New-Object system.management.automation.commandmetadata (Get-Command Get-Process)
[System.management.automation.proxycommand]::Create($MetaData) | out-file C:\powershell\get-process.ps1
Esto creará un script que muestra cómo Get-Process carreras. Coloque cualquier cmdlet que desee reemplazar Get-Process. Si desea buscar en Google más sobre esto, así es como crearía una función de proxy.
Agradable y simple, sin necesidad de Reflector.NET o DotPeek, aplausos. Por cierto, '[System.management.automation.proxycommand] :: Create ($ MetaData)' parece suficiente para mí, solo para mostrar los resultados en la pantalla. –
Esto crea un [comando proxy] (http://blogs.msdn.com/b/powershell/archive/2009/01/04/extendiendo-y-o-modificando-comandos-con-proxies.aspx), que no es No es lo mismo que mirar el código fuente en absoluto. Esto no le da el código fuente para Get-Process, o le muestra cómo se ejecuta; devuelve un script base que puede usar para modificar el cmdlet, por ejemplo, al agregarle parámetros adicionales. –
crédito http://windowsitpro.com/blog/powershell-proxy-functions – Djarid
Parte del código se puede encontrar en el sitio de recursos de referencia: http://referencesource.microsoft.com/#System.Management.Automation/System/Management/Automation/ChildItemCmdletProviderIntrinsics.cs,c6eed9f6a5417c19
Esto sólo da el contorno sin embargo; no el detalle del código
para los cmdlets compilados, se puede obtener la ruta a la .dll
con:
(Get-Command Get-ChildItem).DLL
(Reemplazar Get-ChildItem
con el cmdlet le interesa)
Una vez que conoce la ruta a la .dll
, se puede abrirlo con un desensamblador .NET como dotPeek:
& dotPeek64.exe (Get-Command Get-ChildItem).DLL
The source for Powershell is now available on Github.
La fuente para Get-ChildItem
se puede encontrar here.
¿Qué sucede cuando la respuesta de una pregunta cambia de "no" a "sí"? –
@GeekyI Presumiblemente, el OP (póster original) debería aceptar la nueva respuesta, en lugar de la respuesta previamente aceptada. Pero el OP nunca aceptó una respuesta de todos modos, ni tiene un perfil activo, así que supongo que no importa mucho. –
Estoy de acuerdo, creo que acepto esta respuesta. –
- 1. Hosted PowerShell no puede ver los Cmdlets en el mismo ensamblaje
- 2. ¿Cómo ver el código fuente de los archivos dll?
- 3. Escribir CmdLets de PowerShell en Python dinámicamente
- 4. ¿Cuáles son tus cmdlets Powershell favoritos?
- 5. Hacer script de PowerShell cmdlets ejecutar en el ámbito global
- 6. Mejores prácticas de desarrollo de cmdlets de Powershell
- 7. ¿Es posible crear Cmdlets de Windows PowerShell con F #?
- 8. ¿Cómo ver el código fuente dentro de un archivo JAR?
- 9. Cómo ver el código fuente de R (pre-análisis)
- 10. ¿Cómo puedo ver el código fuente de Flash?
- 11. Cómo escribir la ayuda de Powershell para mis cmdlets
- 12. Desbloqueo de cuentas bloqueadas con PowerShell (no con los cmdlets de Quest AD)
- 13. ¿Es posible llamar a los cmdlets de PowerShell de forma asíncrona?
- 14. ¿Dónde puedo ver el código fuente del Sun JDK?
- 15. Powershell y TFS: tf.exe en comparación con los cmdlets TFS de Power Tools?
- 16. ¿Es posible compartir propiedades y comentarios entre los cmdlets de Powershell en C#?
- 17. ¿Cómo podemos ver el registro de desarrollo de Rails?
- 18. Enviar comandos administrativos a mi C# Windows Service usando los propios PowerShell CmdLets
- 19. Llamando cmdlets de powershell desde el archivo por lotes de Windows
- 20. ¿Cómo puedo ver el código para los archivos nib/xib?
- 21. contenido de la página html cambiado por jQuery, pero "Ver código fuente" no reflejan los cambios
- 22. Cómo mantener la salida html PHP 'Ver código fuente' limpia
- 23. ¿Podemos ver la plantilla de una instancia de código de compilador de C++
- 24. ¿Podemos ver objetos en la memoria JVM?
- 25. ver código nativo de Eclipse
- 26. ¿Hay alguna manera de ver el código fuente de un método desde la consola de Rails?
- 27. Remoting de Powershell: uso de cmdlets de módulo importados en una sesión remota
- 28. ¿Cómo obtengo el código fuente de Ubuntu?
- 29. Listado de usuarios en el grupo de anuncios de forma recursiva con el script de powershell sin CmdLets
- 30. Encontrar el código fuente de Android
Los binarios no son .NET, por lo que la reflexión es correcta. – Will
¿Qué? No, eso es tonto. Actualizaré mi respuesta con algunas reflexiones. – halr9000
Ahora puede - https://github.com/PowerShell/PowerShell/blob/HEAD/src/Microsoft.PowerShell.Commands.Management/commands/management/GetChildrenCommand.cs. – codekaizen