Compartir a través de


Windows PowerShell: ¿Cereal o serie?

Serializar puede ser útil al exportar o recuperar objetos con Windows PowerShell.

Don Jones

Al ejecutar las clases de Windows PowerShell, estoy indicando constantemente Mis a los alumnos a los objetos de la canalización a Get-Member:

Get-Process | Get-Member

Get-Member o GM para abreviar, está diseñado para utilizar una característica de Microsoft .NET Framework que se llama reflexión. Esta característica muestra información acerca de un objeto, incluido su nombre oficial, las propiedades, métodos y así sucesivamente. Este cmdlet es una forma mucho más fácil ver rápidamente lo que puede hacer un objeto a cavar alrededor de un motor de búsqueda o poring a través del sitio Web de MSDN Library.

A veces, no obstante, a los alumnos que intente ejecutar este cmdlet, verá algo parecido a esto de Get-Member:

TypeName: Deserialized.System.Diagnostics.Process

¿Bien, se puede saber qué es un proceso, pero un proceso deserializado? La investigación adicional de la salida de Get-Member también revela que, a diferencia de los procesos normales que cuentan con métodos para detener el proceso y realizar otras acciones, estos procesos deserializados parecen no tener ningún método, lo que significa que no puede hacerlos realizar ninguna acción. ¿Qué sucede con los que?

Cómo convertirse en cereales de objetos … er, serializados

En Windows, los objetos son bits de funcionamiento del software. Un proceso es, literalmente, una aplicación de software. Un objeto de proceso proporciona propiedades que describen algunos de los atributos de un proceso, como su nombre, la utilización de memoria y así sucesivamente; el objeto puede tener también los métodos para desencadenar acciones tales como detener, actualizar y así sucesivamente.

Los objetos son excelentes cuando están en el equipo, pero no hay ninguna forma práctica real de todo el objeto de la transmisión a través de una red. Serializar es una forma de crear una representación de texto de un objeto, normalmente en XML. La figura 1 muestra objetos de proceso que se han serializado en XML.

Básicamente, la técnica de serialización toma una instantánea de las propiedades del objeto, codifica en un archivo XML estructurado y, a continuación, transmite ese archivo a través de la red. En este momento, el archivo XML es esencialmente un archivo de texto. Ya no es una conexión directa entre los procesos en ejecución reales y el archivo XML. El archivo es una vista en un momento de las propiedades del objeto transmitido.

Figure 1 The XML file will serialize the process objects

Figura 1 será de XML en el archivo de serializar los objetos de proceso.

Serialización no conserva los métodos del objeto. No hay ninguna forma de volver al objeto original y saber que se ejecute el método. Cuando el shell necesita leer el objeto serializado, deserializa. Para ello, leyendo el texto XML y construir un elemento que tiene un aspecto muy similar al objeto original, sin todos sus métodos, del curso.

Sitios comunes para la serie de objetos

Windows PowerShell v2 utiliza la serialización en dos lugares comunes:

  • Cuando exporte objetos en formato XML mediante la exportación de CliXML
  • Al recuperar objetos de un equipo remoto mediante acceso remoto de Windows PowerShell

Por ejemplo, este comando se recuperan los procesos en ejecución en un equipo remoto, ordenarlos en la utilización de memoria virtual y muestra los 10 primeros:

invoke-command { ps } -computer server-r2 | sort vm -desc | select -first 10

También puede tener todos la ordenación y la selección que se producen en el equipo remoto, que tiene los objetos de las ventajas de transmisión menos serializado a través de la red:

invoke-command { ps | sort vm -desc | select -first 10 } -computer server-r2

La cuestión es que los objetos que entran a través de la red ya no son los procesos reales. Ha sido incluidos en formato XML. No se puede tomar uno de los procesos y saber que deje de sí misma, porque no hay ninguna conexión entre lo que tiene en el equipo local y lo que se está ejecutando en el equipo remoto.

Serializar también puede ser útil para almacenar información de objeto. Por ejemplo, suponga que exporta las configuraciones de todos los servicios ’ a un archivo XML:

get-wmiobject win32_service | export-clixml baseline.xml

A continuación, podría utilizar esa instantánea para comparar la configuración del servidor en el futuro. Esto alerta a los cambios de configuración realizados, ya sea accidentalmente o a propósito.

Este comando compara los objetos de servicio actual a los de la instantánea:

compare-object (get-wmiobject win32_service) (import-clixml baseline.xml)

En este caso, el hecho de que se deserializa objetos Don tienen métodos no es importante. Se trata de las propiedades que contienen toda la información de configuración, como iniciar modo, la cuenta de inicio de sesión y así sucesivamente.

Ser Careful con Cerealized … er, número de serie de objetos

Serialización puede ser un problema, sin embargo, cuando necesita tener acceso a los métodos del objeto. Por ejemplo, este comando funciona correctamente en el equipo local (y reiniciará en él, por lo que no se ejecuta a menos que esté listo para):

Get-WmiObject Win32_OperatingSystem | ForEach-Object { $_.Reboot() }

Sin embargo, no funcionará el comando siguiente:

Invoke-Command { Get-WmiObject Win32_OperatingSystem } –computer Server-R2 | ForEach-Object { $_.Reboot() }

Esto es debido a que el resultado de Invoke-Command es un objeto deserializado sin métodos. No se puede ejecutar el método de reinicio. Sin embargo, podríamos, hacemos:

Invoke-Command { Get-WmiObject Win32_OperatingSystem | ForEach-Object { $_.Reboot() }} –computer Server-R2

Ahora nos estamos invocando el método de reinicio del equipo remoto, antes de que el objeto se serializa y pierde sus métodos. Por lo tanto, siempre que la serialización se parece a crear un problema, normalmente hay una solución temporal. Sólo tiene que tener en cuenta cuando se produce la serialización.

Don Jones

Don Jones es un fundador de la tecnología concentrado y preguntas de respuestas sobre Windows PowerShell y otras tecnologías en ConcentratedTech.com. También es un autor de Nexus.Realtimepublishers.com, lo que muchos de sus libros disponibles, como las ediciones electrónicas gratuitas a través de su sitio web.

Contenido relacionado