Prendere la semplice HashTable:Perché sembra che Get-Date restituisca oggetti DateTime, ma il BinarySerializer indica che restituisce un oggetto PSObject?
$data = @{
First = 'Justin';
Last = 'Dearing';
StartDate = Get-Date '2002-03-23';
}
Lo StartDate chiave sembra contenere un DateTime.
C:\Users\zippy\Documents> $data.StartDate.GetType().FullName
System.DateTime
Tuttavia, se si tenta di eseguire la serializzazione binario su di esso, ottengo un'eccezione lamentava che PSObject non è serializzabile.
$ms = New-Object System.IO.MemoryStream
$bf = New-Object System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
$bf.Serialize($ms, $data)
$ms.Close()
Produce:
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
Questo messaggio va via e tutto funziona se uso un cast esplicito al [DateTime] in questo modo:
$data = @{
First = 'Justin';
Last = 'Dearing';
StartDate = [DateTime] (Get-Date '2002-03-23');
}
Così è Get-Date non proprio restituendo un DateTime o altre stranezze di PowerShell al lavoro qui.
Penso che tutto in PS sia impostato su 'PSObject' a meno che non si definisca esplicitamente il tipo. Effettua conversioni di tipi di dati dinamici, quindi potrebbe semplicemente restituire una stringa che interpreta come 'System.Datetime' in fase di esecuzione. – JNK
@JNK ma perché Object.GetType() interpreta qualcosa come un DateTime che il formattatore binario interpreta come PSObject? –
Questa è solo una supposizione, ma forse perché viene interpretata in fase di esecuzione (dal momento che si esegue il metodo 'GetType()' di un PSObject) - il formattatore binario è una classe di sistema, non una classe PS – JNK