Powershell 如何检查DateTime值是否为null或空?

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字段是否不是空的\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 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。