sql-server - 如何将日期时间从 PowerShell 输出转换为 yyyy-MM-dd HH:mm:ss 格式
问题描述
在尝试从 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
使用 eg 转换输出的任何尝试$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)"
}
有谁能帮忙吗?
解决方案
使用ISO 8601格式的日期时间字符串 - 例如2021-10-10T21:14:40
- 您可以使用标准s
格式说明符获得:
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 格式字符串的优点在于它是根据定义文化不变的。
一个简化的例子,使用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
调用,因此前者的输出(具有通过创建的计算属性的[pscustomobject]
实例)被简单地传递。 .lastlogon
Select-Object
推荐阅读
- android - 如何从另一个类而不是 Application 类开始 koin
- java - 如何使用带有动态参数的spring DI构造函数
- c# - 将对象分组到一段时间以产生最小组
- maven-surefire-plugin - Concordion 找不到规范
- vb.net - 将数据从 CSV 文件导入数据网格
- javascript - 在带有 event.code 的 switch 语句中使用 JavaScript 运算符
- powershell - 需要一个单行 powershell 命令来下载具有基本身份验证的文件
- selenium - 使用 Selenium 的 Internet Explorer 驱动程序在访问外部网页时不允许处理窗口
- drupal - Drupal 8 第一个 MVC
- ruby-on-rails - Rails - 每当更新对象时进行 api 调用的最佳方式