如何将日期时间从 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

如何使用 PowerShell 将 UTC 转换为 EST

如何将 awk 匹配转换为 powershell 命令?

将科学记数法转换为日期时间

如何将 UTC 日期字符串转换为本地时间 (systemTimeZone)

如何将日期(“Ymd”)的输出转换为 PHP 中的数字? [复制]