Pide tu presupuesto ya!

Funciones de PowerShell frente a cmdlets: ¿diferencia?

Cada vez que ejecuta o ejecuta algo en PowerShell, está ejecutando un “comando”. Un comando es un término informal para código ejecutable, que puede ser un cmdlet integrado de PowerShell, una función personalizada o incluso un método de objeto.

Los cmdlets son código ejecutable compilado proporcionado por Microsoft, creado en un lenguaje como C#, compilado y agregado a un módulo de PowerShell por desarrolladores de software. Las funciones, por otro lado, las crean los usuarios directamente en PowerShell. Aunque las funciones y los cmdlets son técnicamente diferentes, se pueden considerar similares cuando estás empezando.

Para demostrar funciones frente a cmdlets, profundicemos con una breve demostración. Busquemos todos los comandos disponibles en la sesión actual:

## Find all of the available command types
Get-Command | Group-Object -Property CommandType

La gente suele intercambiar los términos comandos, cmdlets y funciones. Si esto le resulta confuso, recuerde que un “comando” generalmente se refiere a un cmdlet o a una función.

El Group-Object El cmdlet agrupa las propiedades y aquí proporciona un resumen de los comandos por tipo.

Verá tipos de comandos como alias, cmdlets y funciones. Inspeccionemos el código detrás de uno de los cmdlets:

Get-Command -Name Get-Content | select -ExpandProperty Definition

El Definition La propiedad contiene el código de una función y conjuntos de parámetros para un cmdlet. En el caso de los cmdlets, solo verá conjuntos de parámetros.

Si bien los cmdlets están más optimizados para el rendimiento debido a su naturaleza precompilada, las funciones ofrecen flexibilidad. Para tareas que involucran lógica personalizada o procesamiento de datos, las funciones le permiten ir más allá de lo que pueden hacer los cmdlets, brindando espacio para la creatividad y la resolución de problemas.

Ahora, inspeccionemos una función:

Get-Command -Name Add-BitLockerKeyProtector | select -ExpandProperty Definition

Puede ver el código real de PowerShell para las funciones.

Si desea ver el módulo en el que reside una función, puede consultar el Source propiedad:

Get-Command -Name Add-AzADAppPermission

Para localizar el módulo, utilice:

Get-Module -Name BitLocker | select Path

Este comando mostrará la ruta del módulo. Por ejemplo, si el módulo está ubicado en /Users/adam/.local/share/powershell/Modules/Az.Resources/7.4.0/Az.Resources.psm1puede abrirlo en VS Code para una inspección más detallada.

code '/Users/adam/.local/share/powershell/Modules/Az.Resources/7.4.0/Az.Resources.psm1'

Dentro del módulo, encontrará varias funciones escritas en PowerShell, que puede explorar y modificar según sea necesario.

Es importante recordar que, aunque los cmdlets tienden a funcionar mejor, especialmente con conjuntos de datos grandes, las funciones pueden ser más versátiles. Permiten la creación de lógica y flujos de trabajo personalizados que no son posibles solo con cmdlets.

Al decidir entre usar un cmdlet o una función, piense en la tarea en cuestión. Los cmdlets son ideales para tareas integradas que ya están optimizadas, pero si necesita más control o personalización, las funciones son su mejor opción. Las funciones pueden ayudar a crear bloques de código reutilizables, optimizar tareas complejas y mejorar la modularidad general del script.

Written by

Leave a comment