Powershell获取日期错误

时间:2014-07-11 07:25:26

标签: powershell

我对这个错误信息非常困惑:

Get-Date : Cannot bind parameter 'Date' to the target. Exception setting "Date": "Object reference not set to an instance of an object."

问题在于:

$logondate = $(get-date $([datetime]::Parse( $user.LastLogonDate)) -Format 'yyyy-MM-dd HH:mm:ss')
#user is vartype: System.Management.Automation.PSMethod
#$user.LastLogonDate in debbug with this value: 10.06.2014 14:26:13 (dd.MM.yyyy)

这个错误意味着什么?

从30个AD帐户只有3个这个ParameterBindingException。

完整错误消息:

Get-Date : Cannot bind parameter 'Date' to the target. Exception setting "Date": "Object reference not set to an instance of an object."
At C:\scripts\AD.ps1:309 char:28
+     $logondate = $(get-date <<<<  $([datetime]::Parse( $user.LastLogonDate)) -Format 'yyyy-MM-dd HH:mm:ss')
    + CategoryInfo          : WriteError: (:) [Get-Date], ParameterBindingException
    + FullyQualifiedErrorId : ParameterBindingFailed,Microsoft.PowerShell.Commands.GetDateCommand

1 个答案:

答案 0 :(得分:2)

您收到该错误,因为某些原因Parse()无法将$user.LastLogonDate解析为日期。也许是因为用户从未登录过(因此值为$null),或者因为Parse()无法识别默认日期格式。

但是,LastLogonDate属性(由Get-ADUser创建)已经拥有DateTime值。你在这里要做的是:隐式地将日期转换为字符串,将该字符串解析回日期,然后再次从中创建一个格式化的字符串。

别。

只需格式化您已有的DateTime值:

PS C:\> $user = Get-ADUser $env:USERNAME -Property *
PS C:\> $user.LastLogonDate.GetType().FullName
System.DateTime
PS C:\> $user.LastLogonDate

Monday, July 11, 2014 8:50:38 AM

PS C:\> $user.LastLogonDate.ToString('yyyy-MM-dd HH:mm:ss')
2014-07-07 08:50:38

添加对$null值的检查,以防止从未登录的用户出现错误:

if ($u.LastLogonDate -ne $null) {
    $user.LastLogonDate.ToString('yyyy-MM-dd HH:mm:ss')
}