Tome la sencilla HashTable:¿Por qué Get-Date parece devolver objetos DateTime, pero el BinarySerializer indica que devuelve un PSObject?
$data = @{
First = 'Justin';
Last = 'Dearing';
StartDate = Get-Date '2002-03-23';
}
startdate clave parece contener una DateTime.
C:\Users\zippy\Documents> $data.StartDate.GetType().FullName
System.DateTime
Sin embargo, si intento para realizar la serialización binaria en él, me sale una excepción quejaba de que PSObject no es serializable.
$ms = New-Object System.IO.MemoryStream
$bf = New-Object System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
$bf.Serialize($ms, $data)
$ms.Close()
Lanza:
DocumentsException calling "Serialize" with "2" argument(s): "Type 'System.Management.Automation.PSObject' in Assembly 'System.Management.Automation, Versio
n=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' is not marked as serializable."
At C:\Users\jdearing\AppData\Local\Temp\b8967f99-0a24-41f7-9c97-dad2bc288bd9.ps1:12 char:14
+ $bf.Serialize <<<< ($ms, $data)
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
este mensaje desaparece y todo funciona si uso una conversión explícita a [Fecha y hora], así:
$data = @{
First = 'Justin';
Last = 'Dearing';
StartDate = [DateTime] (Get-Date '2002-03-23');
}
Así es Get-Date no es realmente devolviendo un DateTime, o hay alguna otra rareza de powershell en acción aquí.
Creo que todo en PS tiene como 'PSObject' a menos que defina explícitamente el tipo. Realiza conversiones de tipos de datos dinámicos, por lo que podría devolver una cadena que interpreta como 'System.Datetime' en tiempo de ejecución. – JNK
@JNK pero ¿por qué Object.GetType() interpreta algo como un DateTime que el formateador binario interpreta como PSObject? –
Esto es solo adivinar, pero tal vez porque se interpreta en tiempo de ejecución (ya que está ejecutando el método 'GetType()' de un objeto PSObject) - el formateador binario es una clase del sistema, no una clase PS – JNK