PowerShell - 从System.DateTime到System.ConsoleColor的无效转换

时间:2017-10-31 13:27:52

标签: powershell

# Get Password Expire Date
$EXPDTE = [datetime]::FromFileTime((Get-ADUser -Identity $USERNAME -Properties "msDS-UserPasswordExpiryTimeComputed")."msDS-UserPasswordExpiryTimeComputed")

# Subtract Expire Date from Today
$DAYSTOEXP = (($EXPDTE)-(Get-Date)).Days

Write-Host "{0}" -f $EXPDTE

给我以下错误:

Write-Host : Cannot bind parameter 'ForegroundColor'. Cannot convert value "1/14/2018 10:39:12 AM" to type 
"System.ConsoleColor". Error: "Invalid cast from 'System.DateTime' to 'System.ConsoleColor'."
At C:\Users\\Documents\PowerShell\ADPasswordExpire.ps1:14 char:21
+ Write-Host "{0}" -f $EXPDTE
+                     ~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Write-Host], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.WriteHostCommand

仅在使用Write-Host和-f运算符时才会发生这种情况。

如果我这样做:

$ EXPDTE

Sunday, January 14, 2018 10:39:12 AM

$ EXPDTE.ToString()

1/14/2018 10:39:12 AM

使用-f时,我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

在您的情况下,-f-ForeGroundColor的缩写。

删除Write-Host,或使用子表达式:

"{0}" -f $EXPDTE
Write-Host $("{0}" -f $EXPDTE)

修改

使用[datetime]对象,您应指定日期格式。看看这个ss64 page。例如。对ShortDatePattern使用d或为LongDatePattern使用D。如果您需要不同的输出字符串,请回复评论。

"Date to Expiry: {0:d}" -f $EXPDTE
"Days to Expire: {0}"-f $DAYSTOEXP