DateTime 变量未正确解析,字符串有效

Posted

技术标签:

【中文标题】DateTime 变量未正确解析,字符串有效【英文标题】:DateTime variable not parsing correctly, string works 【发布时间】:2015-06-06 17:19:08 【问题描述】:

我正在尝试将变量传递给 powershell 命令,如下所示:

$Today = Get-Date
Get-SCSMClassInstance -Filter ClosedDate -eq $Today

但我收到此错误:

Get-SCSMClassInstance : ClosedDate_C529833E_0926_F082_C185_294CBC8BB9FD='$Today' 
-- String was not recognized as a valid DateTime.
At line:1 char:1
+ Get-SCSMClassInstance -ComputerName $computer $IncidentClass -Filter 
ClosedDate ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (Microsoft.Syste...InstanceComman 
   d:GetSCClassInstanceCommand) [Get-SCClassInstance], UnknownDatabaseException
+ FullyQualifiedErrorId : ExecutionError,Microsoft.SystemCenter.Core.Commands 
   .GetSCClassInstanceCommand

如果我直接传递字符串,不管格式如何,它都可以正常工作:

Get-SCSMClassInstance -Filter ClosedDate -eq "Friday, June 5, 2015 11:42:33 AM"
Get-SCSMClassInstance -Filter ClosedDate -gt "2015-6-5 11:42:33Z"

我已经尝试将变量设置为 DateTime 以及字符串,每种可以想象的格式 - 我已经确保,当解析变量时,它绝对会变成正确的字符串,但没有任何效果。

有什么想法吗?

【问题讨论】:

【参考方案1】:

Filter parameter 是字符串而不是脚本块。在其他情况下,它与脚本块一起工作,因为脚本块的字符串形式是块的文本,没有周围的大括号。但是,在这种情况下,您需要在过滤器中替换变量。试试这个:

Get-SCSMClassInstance -Filter "ClosedDate -eq ""$Today"""

【讨论】:

如此简单!非常感谢!我不得不将整个表达式括在括号中 - Get-SCSMClassInstance -Filter ("ClosedDate -eq $Today"),它成功了。

以上是关于DateTime 变量未正确解析,字符串有效的主要内容,如果未能解决你的问题,请参考以下文章

SQLite 和 .net 字符串未被识别为有效的 DateTime

DatePicker 绑定到 DateTime。 “字符串未被识别为有效的日期时间”

尝试使用linq过滤数据时,字符串未被识别为有效的DateTime

该字符串未被识别为有效的 DateTime 或 Adding a value to a 'datetime' column caused an overflow.

变量未正确保存

运行时出现该字符串未被识别为有效的 DateTime。有一个从索引 0 处开始的未知字。