Windows PowerShell: Serializzare o non serializzare?

La serializzazione può risultare molto utile per l'esportazione o il recupero di oggetti con Windows PowerShell.

Don Jones

Eseguendo classi su Windows PowerShell, sono indicando costantemente miei studenti a oggetti pipe a Get-Member:

Get-Process | Get-Member

Member Get o GM in breve, consente di utilizzare una funzionalità di Microsoft .NET Framework denominata reflection. Questa funzionalità consente di visualizzare informazioni su un oggetto, inclusi il nome ufficiale, proprietà, metodi e così via. Questo cmdlet è un metodo più semplice per visualizzare rapidamente un oggetto può eseguire più dettagli intorno in un motore di ricerca o poring attraverso il sito MSDN Library Web.

In alcuni casi, tuttavia, quando gli studenti tentano di eseguire questo cmdlet, noteranno qualcosa di simile da Get-Member:

TypeName: Deserialized.System.Diagnostics.Process

Sì, è possibile sapere che cosa è un processo, ma un processo de-serialized? Ulteriore analisi dell'output di Get-Member rivela inoltre che, a differenza dei normali processi che dispongono di metodi per arrestare il processo ed eseguire altre operazioni, questi processi de-serialized non sembrano disporre di metodi, ovvero che non li si renda eseguire qualsiasi azione. Cosa c'è che non va?

Oggetti come diventare cereali … er, serializzati

In Windows, gli oggetti sono bit di funzionamento del software. Un processo è letteralmente un'applicazione software. Un oggetto processo fornisce le proprietà che descrivono alcuni attributi di un processo, come il nome, l'utilizzo della memoria e così via; l'oggetto potrebbe essere anche metodi per attivare azioni come l'arresto, l'aggiornamento e così via.

Gli oggetti sono molto utili quando si tratta del computer, ma non esiste un modo pratico reale di trasmettere l'intero oggetto attraverso una rete. La serializzazione è un modo per creare una rappresentazione testuale di un oggetto, in genere in formato XML. Figura 1 Mostra gli oggetti processo sono stati serializzati in XML.

Essenzialmente, la tecnica di serializzazione richiede uno snapshot delle proprietà dell'oggetto, li codifica in un file XML strutturato e trasmette quindi tale file attraverso la rete. A questo punto, il file XML è essenzialmente un file di testo. Non esiste più una connessione diretta tra i processi in esecuzione effettivi e tale file XML. Il file è una visualizzazione in un momento di proprietà dell'oggetto trasmesso.

Figure 1 The XML file will serialize the process objects

Figura 1 consentirà di file XML di serializzare oggetti processo.

Serializzazione non conserva i metodi di un oggetto. Non è possibile tornare indietro all'oggetto originale e indicare l'esecuzione del metodo. Quando la shell è necessario leggere l'oggetto serializzato, deserializzato. L'operazione viene eseguita la lettura del testo XML e di creazione di un aspetto molto simile all'oggetto originale, ovvero senza tutti i relativi metodi, ovviamente.

Risorse comuni per oggetti seriali

Windows PowerShell v2 utilizza la serializzazione in due posizioni comuni:

  • Quando si esportano oggetti in formato XML utilizzando CliXML esportazione
  • Quando si recuperano gli oggetti da un computer remoto tramite i servizi remoti di Windows PowerShell

Ad esempio, questo comando verrà recuperare i processi in esecuzione da un computer remoto, ordinarli sull'utilizzo della memoria virtuale e visualizzare i primi 10:

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

Potrebbe anche avere tutto l'ordinamento e la selezione si verificano nel computer remoto, ha il vantaggio di trasmissione meno serializzata gli oggetti attraverso la rete:

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

Il punto è che gli oggetti provenienti in rete non sono più processi reali. Sono stati inseriti in formato XML. È Impossibile ottenere uno di questi processi e indicano l'arresto, perché non vi è alcuna connessione tra quelli presenti nel computer locale e ciò che è in esecuzione sul computer remoto.

La serializzazione può essere utile anche per memorizzare le informazioni sull'oggetto. Si supponga, ad esempio, che è possibile esportare configurazioni tutti i servizi ’ in un file XML:

get-wmiobject win32_service | export-clixml baseline.xml

È quindi possibile utilizzare tale snapshot per confrontare la configurazione del server in futuro. Dovrebbe segnalare eventuali modifiche di configurazione apportate, inavvertitamente o intenzionalmente.

Questo comando confronta gli oggetti servizio corrente a quelle nello snapshot:

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

In questo caso, il fatto che deserializzata oggetti Don ’t dispongono di metodi non è importante. È la proprietà che contengono tutte le informazioni di configurazione, ad esempio inizio modalità, account di accesso e così via.

Essere Careful con Cerealized … er, oggetti serializzati

Serializzazione può essere un problema, tuttavia, quando è necessario accedere ai metodi di un oggetto. Ad esempio, questo comando funziona correttamente sul computer locale (e verrà riavviato, in modo da non eseguirla se non si è pronti per cui):

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

Il comando riportato di seguito non funziona, anche se:

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

Infatti il risultato di Invoke-Command è un oggetto deserializzato con alcun metodo. Il metodo di riavvio non verrà eseguito. È possibile, tuttavia, eseguire questa operazione:

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

Abbiamo ora stiamo richiamando il metodo reboot sul computer remoto prima che l'oggetto viene serializzato e perde i relativi metodi. Pertanto, ogni volta che la serializzazione sembra essere creando un problema, di solito un lavoro intorno. È necessario essere a conoscenza quando avviene la serializzazione.

Don Jones

Don Jones è un fondatore di tecnologia incentrati e risposte alle domande su Windows PowerShell e altre tecnologie di ConcentratedTech.com. È anche autore di Nexus.Realtimepublishers.com, molti dei suoi libri rende disponibile come libere edizioni elettroniche tramite il suo sito web.

Contenuto correlato