//
// Copyright (c) 2009 Microsoft Corporation. All rights reserved.
//
// DISCLAIMER OF WARRANTY: The software is licensed “as-is.” You
// bear the risk of using it. Microsoft gives no express warranties,
// guarantees or conditions. You may have additional consumer rights
// under your local laws which this agreement cannot change. To the extent
// permitted under your local laws, Microsoft excludes the implied warranties
// of merchantability, fitness for a particular purpose and non-infringement.
using System;
using System.IO;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
namespace Microsoft.Samples.PowerShell.Serialization
{
using PowerShell = System.Management.Automation.PowerShell;
class Serialization02
{
///
/// By default serialization preserves all public properties of an object.
///
/// This sample looks at an existing .NET class and shows how to make sure that
/// information from instance of this class is preserved across serialization/deserialization
/// when the information is not available in public properties of the class
///
static void Main()
{
string typesPs1XmlPath = Path.Combine(Environment.CurrentDirectory, "Serialization02.types.ps1xml");
if (!File.Exists(typesPs1XmlPath))
{
Console.WriteLine("Building the project in Visual Studio should have created a types.ps1xml file at the following path:");
Console.WriteLine("{0}", typesPs1XmlPath);
Console.WriteLine();
Console.WriteLine("Cannot continue without this file being present.");
return;
}
// Create a default InitialSessionState
InitialSessionState iss = InitialSessionState.CreateDefault();
// Add our types.ps1xml file to the InitialSessionState
// (one alternative would be to associate the file with a module or with a snap-in)
iss.Types.Add(new SessionStateTypeEntry(typesPs1XmlPath));
//
// Demonstrate the effects of the types.ps1xml and DeserializingTypeConverter
//
using (Runspace myRunspace = RunspaceFactory.CreateRunspace(iss))
{
myRunspace.Open();
//
// Demonstrate that the deserializing an exception results in a live object
//
using (PowerShell powershell = PowerShell.Create())
{
powershell.Runspace = myRunspace;
powershell.AddScript(@"
# Get an System.Drawing.Point object
Add-Type -AssemblyName System.Drawing
$point = New-Object System.Drawing.Point 12,34
# Verify that the extra property is hidden by default
Write-Output 'Below are the results of running $point | Format-List * :'
$point | Format-List * | Out-String
Write-Output '----------------------------------------'
# Serialize the object
$point | Export-CliXml .\Serialization02.xml
# Deserialize the object
$deserializedPoint = Import-CliXml .\Serialization02.xml
# Verify that the extra property got serialized
Write-Output 'Below are the results of running $deserializedPoint | Get-Member :'
$deserializedPoint | Get-Member | Out-String
Write-Output '----------------------------------------'
");
foreach (string s in powershell.Invoke())
{
System.Console.WriteLine(s);
}
}
// Close the runspace and release any resources.
myRunspace.Close();
}
System.Console.WriteLine("Hit any key to exit...");
System.Console.ReadKey();
}
}
}