如何将日期时间从 PowerShell 输出转换为 yyyy-MM-dd HH:mm:ss 格式
Posted
技术标签:
【中文标题】如何将日期时间从 PowerShell 输出转换为 yyyy-MM-dd HH:mm:ss 格式【英文标题】:How to convert datetime from PowerShell output to yyyy-MM-dd HH:mm:ss format 【发布时间】:2021-11-29 18:37:02 【问题描述】:在尝试从 PS 将 lastLogon 日期写入 DB 时,我得到了输出 10-10-2021 21:14:40
,但是当将其写入我的 DB (MS SQL) 时,日期转换为 1900-01-01 00:00:00.000
而不是 2021-10-10 21:14:40.000
,并且任何尝试转换使用例如输出$DateStr = $lastLogon.ToString("yyyy-MM-dd HH:mm:ss.sss")
到目前为止失败了
我的 PS 脚本:
.....
Import-Module ActiveDirectory
Add-Type -AssemblyName System.Web
$EmploymentUser = Invoke-SQL -sqlCommand "select * from EmploymentUser where LastFlowEditDate Is Not NUll AND (EndDate Is Null OR EndDate > CURRENT_TIMESTAMP) AND StartDate < CURRENT_TIMESTAMP ORDER BY Initials;"
foreach($User in $EFP_EmploymentUser)
Get-ADUser $User.Initials -Properties lastLogon | Select @Name="lastLogon";Expression=[datetime]::FromFileTime($_.'lastLogon')
Invoke-SQL -sqlCommand "UPDATE EFP_EmploymentUser SET lastLogonAD = '$($lastLogon)' WHERE ID like $($User.ID)"
有谁能帮忙吗?
【问题讨论】:
【参考方案1】:使用 ISO 8601 格式的日期时间字符串 - 例如2021-10-10T21:14:40
- 您可以通过 standard s
format specifier 获得:
foreach ($user in $EFP_EmploymentUser)
$lastlogon = [datetime]::FromFileTime(
(Get-ADUser $User.Initials -Properties lastLogon).lastlogon
)
Invoke-SQL -sqlCommand "
UPDATE EFP_EmploymentUser
SET lastLogonAD = '$($lastLogon.ToString('s'))'
WHERE ID like $($user.ID)
"
使用 ISO 8601 格式字符串的优点是它在定义上是 culture-invariant。
一个简化的例子,使用Get-Date
:
PS> (Get-Date).ToString('s')
2021-10-10T17:42:41
注意:如果Get-Date
碰巧涉及到,你可以更简单地使用它的-Format
参数:
PS> Get-Date -Format s
2021-10-10T17:42:41
至于你尝试了什么:
您的代码的主要问题是您尝试使用未定义的变量$lastlogon
,而不是访问当前管道输入对象$_
上的.lastlogon
属性,如由您的 Select-Object
调用创建。
在字符串插值的上下文中(在"..."
字符串内),未定义的$lastlogon
变量扩展为空字符串,这就是SQL 命令最终分配最早日期的原因-它支持的时间值,1900-01-01 00:00:00.000
此外,您的 Get-ADUser ...
语句未连接到 Invoke-SQL
调用,因此前者的输出 - 带有 calculated .lastlogon
属性的 [pscustomobject]
实例通过 Select-Object
创建 - 只是通过.
【讨论】:
更新后的代码就像一个魅力 @mklement0 ;-) .. 非常感谢你的帮助,我真的很感激 :-) 很高兴听到它有帮助,@StigKølbæk;我的荣幸。以上是关于如何将日期时间从 PowerShell 输出转换为 yyyy-MM-dd HH:mm:ss 格式的主要内容,如果未能解决你的问题,请参考以下文章
powershell PowerShell:将WMI日期/时间转换为DateTime