datetime - 为什么 Get-Date 似乎返回 DateTime 对象,但 BinarySerializer 表明它返回一个 PSObject?

标签 datetime powershell binary-serialization psobject

拿简单的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不可序列化。
$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-Date 并没有真正返回 DateTime,或者是其他一些 powershell 奇怪的东西在这里工作。

最佳答案

基于 MSDN :
PSO 对象类:
封装类型为 Object 或类型 PSCustomObject 的基础对象,以允许在 Windows PowerShell 环境中对任何对象进行一致的查看。

( get-Date '2002-03-23' ) -IS [psobject]
True

( get-Date '2002-03-23' ) -IS [datetime]
True

[datetime]( get-Date '2002-03-23' ) -IS [datetime]
True

[datetime]( get-Date '2002-03-23' ) -IS [psobject]
False

关于datetime - 为什么 Get-Date 似乎返回 DateTime 对象,但 BinarySerializer 表明它返回一个 PSObject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9636698/

相关文章:

powershell - 在PowerShell中使用Windows事件日志

Scala 位域序列化

c# - 对于新的 .net 核心应用程序,我应该在 protobuf-net 和 google.protobuf 之间使用什么 NuGet 包?

python - Pandas :将不同天数添加到数据框中的日期

java - 无法使用 Asana API for Java 更新任务上的 "dueAt"或 "dueOn"字段

string - PowerShell: “… ${_.Name} …”有什么问题?

powershell - 删除所有文件和子目录但保留主目录

.net - 二进制序列化,向类添加一个新字段——它会工作吗?

mysql - 从 DATE 和 TIME 创建 DATETIME

javascript - 将无效 javascript 格式的日期转换为 ics 标准日期时间字段