सरल HashTable लें:गेट-डेट डेटटाइम ऑब्जेक्ट्स वापस क्यों प्रतीत होता है, लेकिन बाइनरीसेरियलाइज़र इंगित करता है कि यह एक पीएसओब्जेक्ट देता है?
$data = @{
First = 'Justin';
Last = 'Dearing';
StartDate = Get-Date '2002-03-23';
}
कुंजी StartDate एक DateTime शामिल करने के लिए लगता है।
C:\Users\zippy\Documents> $data.StartDate.GetType().FullName
System.DateTime
हालांकि, अगर मैं इस पर द्विआधारी क्रमांकन प्रदर्शन करने के लिए प्रयास करते हैं, मैं एक अपवाद शिकायत की कि PSObject serializable नहीं है मिलता है।
$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
यह संदेश चला जाता है और अगर मैं [DATETIME] की तरह इतना करने के लिए एक स्पष्ट कलाकारों का उपयोग सब कुछ काम करता है:
$data = @{
First = 'Justin';
Last = 'Dearing';
StartDate = [DateTime] (Get-Date '2002-03-23');
}
तो Get-तिथि नहीं वास्तव में है एक डेटटाइम लौट रहा है, या यहां काम पर कुछ अन्य शक्तियों की विषमता है। MSDN पर
मुझे लगता है कि पीएस में सब कुछ 'PSObject' पर डिफ़ॉल्ट है जब तक कि आप स्पष्ट रूप से प्रकार को परिभाषित नहीं करते। यह गतिशील डेटाटाइप रूपांतरण करता है, इसलिए यह केवल उस स्ट्रिंग को वापस कर सकता है जिसे इसे रनटाइम पर 'System.Datetime' के रूप में व्याख्या करता है। – JNK
@ जेएनके लेकिन ऑब्जेक्ट.गेट टाइप() क्यों डेटटाइम के रूप में कुछ समझता है कि बाइनरी फॉर्मेटर PSObject के रूप में व्याख्या करता है? –
यह अनुमान लगा रहा है, लेकिन हो सकता है क्योंकि इसे रनटाइम पर व्याख्या किया जा रहा है (चूंकि आप PSObject की 'GetType()' विधि चला रहे हैं) - बाइनरी फॉर्मेटर एक सिस्टम क्लास है, पीएस क्लास – JNK