我对这个错误信息非常困惑:
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
答案 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')
}