は、単純なHashTableしてください:Get-DateはDateTimeオブジェクトを返すように見えるが、BinarySerializerはPSObjectを返すと示しているのはなぜですか?
$data = @{
First = 'Justin';
Last = 'Dearing';
StartDate = Get-Date '2002-03-23';
}
キー開始日はDateTimeを含んでいるようです。私はそれをバイナリシリアル化を実行しようとすると、
C:\Users\zippy\Documents> $data.StartDate.GetType().FullName
System.DateTime
はしかし、私はPSObjectはシリアライズではないことを訴えて例外を取得します。
$ms = New-Object System.IO.MemoryStream
$bf = New-Object System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
$bf.Serialize($ms, $data)
$ms.Close()
例外:
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
このメッセージが消えると、すべてが私は[日時]そのように明示的なキャストを使用している場合に動作します:
$data = @{
First = 'Justin';
Last = 'Dearing';
StartDate = [DateTime] (Get-Date '2002-03-23');
}
そうではない、実際には、Get-日ですDateTimeを返したり、ここで働いている他のパワーシェルの奇妙なことです。 MSDNの
私は、あなたが明示的に型を定義しない限り、PSの中のすべてが 'PSObject'にデフォルト設定されていると思います。これは動的なデータ型変換を行うので、実行時に 'System.Datetime'として解釈する文字列を返すことができます。 – JNK
@JNKだが、なぜObject.GetType()がバイナリフォーマッタがPSObjectとして解釈するDateTimeとして何かを解釈するのはなぜですか? –
PSObjectのGetType()メソッドを実行しているため、実行時に解釈されている可能性があります。バイナリフォーマッタは、PSクラスではなくシステムクラスである – JNK