Lấy đơn giản HashTable:Tại sao Get-Date dường như trả về đối tượng DateTime, nhưng BinarySerializer cho biết nó trả về một PSObject?
$data = @{
First = 'Justin';
Last = 'Dearing';
StartDate = Get-Date '2002-03-23';
}
Các StartDate chủ chốt dường như chứa một DateTime.
C:\Users\zippy\Documents> $data.StartDate.GetType().FullName
System.DateTime
Tuy nhiên, nếu tôi cố thực hiện tuần tự hóa nhị phân trên đó, tôi nhận được ngoại lệ khiếu nại PSObject không thể nối tiếp.
$ms = New-Object System.IO.MemoryStream
$bf = New-Object System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
$bf.Serialize($ms, $data)
$ms.Close()
Ném:
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
Thông báo này sẽ biến mất và mọi thứ hoạt động nếu tôi sử dụng một dàn diễn viên rõ ràng để [DateTime] như vậy:
$data = @{
First = 'Justin';
Last = 'Dearing';
StartDate = [DateTime] (Get-Date '2002-03-23');
}
Vậy là Get-Date không thực sự trả về một DateTime, hoặc là một số quyền hạn khác của powerhell tại nơi làm việc ở đây.
Tôi nghĩ mọi thứ trong PS mặc định là 'PSObject' trừ khi bạn xác định rõ ràng loại. Nó thực hiện chuyển đổi kiểu dữ liệu động, do đó, nó có thể chỉ trả về một chuỗi mà nó diễn giải dưới dạng 'System.Datetime' khi chạy. – JNK
@JNK nhưng tại sao Object.GetType() giải thích một cái gì đó như một DateTime mà trình định dạng nhị phân diễn giải như PSObject? –
Đây chỉ là đoán, nhưng có thể bởi vì nó đang được giải thích lúc chạy (vì bạn đang chạy phương thức 'GetType()' của PSObject) - trình định dạng nhị phân là một lớp hệ thống, không phải là lớp PS – JNK