Exponiendo el misterio de los objetos de PowerShell
Hace unas semanas, estaba trabajando en el contenido de un nuevo curso de PowerShell para Pluralsight. El tema eran los objetos. Todos sabemos la importancia de trabajar con objetos en PowerShell. Con suerte, también sabrá que el resultado que obtiene en su pantalla al ejecutar un comando de PowerShell no es toda la historia. La presentación formateada está separada de los objetos subyacentes en la canalización. Por eso es importante saber cómo utilizar Get-Member para descubrir cómo se define un objeto.
En mi curso, estuve en una sección que cubría métodos estáticos. Estos son métodos de objeto que no requieren una instancia del objeto. En la mayoría de las situaciones, cuando desea invocar el método de un objeto, necesita una instancia del objeto.
$d = Get-Date
$d.AddDays(45)Get-Date crea un objeto [DateTime], que tiene un método AddDays(). Pero la clase [DateTime] tiene métodos que puedes invocar y que no requieren una instancia. Estos son métodos estáticos.
PS C:\> [DateTime]::IsLeapYear(2024)
TrueDescubrir métodos estáticos no es fácil. Puedes usar Get-Member, pero solo si ya tienes una instancia del objeto.
¿Pero qué haces con una clase como [Matemáticas]? No hay forma de canalizar eso a Get-Member.
Obtener miembro tipo
Me di cuenta de que quería una alternativa a Get-Member, así que escribí Get-TypeMember.
Especifique un nombre de tipo para descubrir los miembros nativos de un objeto. El comando no le mostrará los miembros agregados por PowerShell.
Las entradas estáticas se mostrarán en verde.
La función escribe su propio tipo de objeto en la canalización, aunque no se expone como una clase disponible públicamente.
PS C:\> Get-Typemember datetime -Name is* | Select *
Type : System.DateTime
Name : IsDaylightSavingTime
MemberType : Method
PropertyType :
ReturnType : System.Boolean
FieldType :
IsStatic : False
Syntax : $obj.IsDaylightSavingTime()
TypeName : System.DateTime
Type : System.DateTime
Name : IsLeapYear
MemberType : Method
PropertyType :
ReturnType : System.Boolean
FieldType :
IsStatic : True
Syntax : $obj.IsLeapYear([Int32]year)
TypeName : System.DateTimeIncluí un archivo de formato personalizado con una vista de tabla alternativa.
Construí el valor de la propiedad Sintaxis como un fragmento de código que puedes cortar y pegar.
Aquí es donde este comando resulta útil.
PS C:\> (Get-Typemember math -Name round).Syntax | Select-Object -unique
$obj.Round([Decimal]d)
$obj.Round([Decimal]d,[Int32]decimals)
$obj.Round([Decimal]d,[MidpointRounding]mode)
$obj.Round([Decimal]d,[Int32]decimals,[MidpointRounding]mode)
$obj.Round([Double]a)
$obj.Round([Double]value,[Int32]digits)
$obj.Round([Double]value,[MidpointRounding]mode)
$obj.Round([Double]value,[Int32]digits,[MidpointRounding]mode)Mi función está destinada a complementar Get-Member, no a reemplazarlo.
Consíguelo
¿Quieres probarlo? Get-TypeMember Es parte del módulo PSScriptTools, que puedes instalar desde la Galería de PowerShell. La función funcionará en Windows PowerShell y PowerShell 7, incluido el multiplataforma.
Espero que me dejes saber lo que piensas.





