Powershell 如何检查DateTime值是否为null或空?
我想检查DateTime字段是否不是空的\null字符串。如果datetime字段不为空,那么我将执行一些操作Powershell 如何检查DateTime值是否为null或空?,powershell,datetime,Powershell,Datetime,我想检查DateTime字段是否不是空的\null字符串。如果datetime字段不为空,那么我将执行一些操作 [DateTime]$expdate = Read-Host "Expiration Date? MM/DD/YYYY" $newexpdate = $expdate.AddDays(1) if (!([DateTime]$expdate -eq "")) { Write-Host -ForegroundColor Green $($newexpdate) "Date Time
[DateTime]$expdate = Read-Host "Expiration Date? MM/DD/YYYY"
$newexpdate = $expdate.AddDays(1)
if (!([DateTime]$expdate -eq "")) {
Write-Host -ForegroundColor Green $($newexpdate) "Date Time entered"
}
以下是我的错误消息:
Cannot convert value "" to type "System.DateTime". Error: "String was not
recognized as a valid DateTime."
At line:1 char:2
+ [DateTime]$expdate = Read-Host "Expiration Date? MM/DD/YYYY"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : MetadataError: (:) [], ArgumentTransformationMetadataException
+ FullyQualifiedErrorId : RuntimeException`
无法将值“”转换为类型“System.DateTime”。错误:“字符串不正确。”
已识别为有效的日期时间。“
第1行字符数:2
+[DateTime]$expdate=读取主机“到期日期?MM/DD/YYYY”
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+CategoryInfo:MetadataError:(:)[],ArgumentTransformationMetadataException
+FullyQualifiedErrorId:RuntimeException`
如何检查字段是否不是字符串而是
DateTime
对象?您的逻辑没有多大意义,但以下是我认为您正在尝试的操作(见下文)。要直接回答上一个问题,可以使用-is
或-isNot
运算符测试对象的类型,该运算符将根据匹配情况返回$True
\$False
。操作符的另一侧可以是字符串或类型加速器,即[DateTime]'10/10/2010'-是'DateTime'
或[DateTime]'10/10/2010'-是[DateTime]
两者都计算为$True
Do
{
$ExpDate = Read-Host -Prompt 'Expiration date? MM/DD/YYYY'
} Until ($ExpDate -match '\d{1,2}\/\d{1,2}\/\d{2,4}')
$NewExpDate = ([DateTime]$ExpDate).AddDays(1)
If ($ExpDate)
{
Write-Host "$NewExpDate Date Time entered." -ForegroundColor 'Green'
}
当您可以向函数或脚本声明强制的
DateTime
-类型参数时,为什么要提示用户输入?如果缺少参数,PowerShell将提示用户输入日期和时间,用户可以在运行时输入。(如果使用读取主机
,则无法自动执行。)如果($expdate){“有值”}否则{“无值”}
空字符串的计算结果为$false
。您可以检查数据类型:$expdate-是否[datetime]将变量声明为[datetime]$foo
强制将对它的任何赋值转换为datetime
。如果它不可转换,就会抛出一个错误,正如您所看到的。不要在$foo
上声明类型,然后可以测试空字符串。首先感谢您的回答。我的问题是:如果用户在没有输入的情况下点击enter“读取主机提示‘到期日期’”什么都没有,如果用户在输入“读取主机提示‘到期日期’”的情况下点击enter,那么我将做一些事情。@Arbelac您可以只做if($ExpDate){do stuff}或者{error handling}
但是如果用户在没有输入的情况下点击enter,则“$ExpDate=读取主机-提示‘到期日期’?MM/DD/YYYY“我收到以下错误:键入“System.DateTime”。错误:“字符串未被识别为有效的DateTime。”@Arbelac在对值进行验证之前,不要尝试强制转换为DateTime。