我有一个奇怪的问题。当服务器的Region and Language
设置设置为English (United States)
时,包含日期和时间的对象不会出现问题。但是当我将其更改为我的国家/地区Dutch (Belgium)
时,我在部分PowerShell脚本中遇到了问题。
PowerShell中是否有某个变量需要设置来修复此问题?或者我是否必须始终在服务器上默认使用英语日期格式?
我们使用例如Don Jones提供的SQL module
来填充SQL数据库。此行在设置为荷兰语时会生成错误,但在设置为英语时则不会生成错误:
if ($properties[$property] -eq 'datetime2') { [datetime]$prop = $result.GetDateTime($result.GetOrdinal($property)) }
我唯一要检索日期的是Get-Date,没有任何特别之处。当设置为Dutch (Belgium)
:
Exception calling "ExecuteNonQuery" with "0" argument(s): "Conversion failed when converting date and/or time from char
acter string."
在为Excel张生成内容时,我遇到了同样的问题。它还抱怨日期时间格式。
答案 0 :(得分:4)
要将DateTime
字段等信息导出到SQL,请使用默认语言设置English (United States)
。
因此,当您的Region and Language
设置与SQL的默认设置不同时,请设置为:English (United States)
<> Dutch (Belgium)
,您应在代码中使用以下格式以符合英语默认值:
"Key" = (Get-Date -Format "yyyy-MM-dd HH:mm:ss")
"Key" = $_.whenCreated.ToString("yyyy-MM-dd HH:mm:ss")
另一种解决方案是在SQL Express 2014中更改输入的默认语言:
Properties > Advanced
Default language
更改为Dutch
(或您使用的内容)Ok
SQL Management Studio
转到Security > Logins
(数据库下方)user name
,然后选择Dutch
下面的Default language
SQL Management Studio
,你应该好好去 <强>结果:强>
在PowerShell代码中使用CmdLet Get-Date
时,在将数据传输到SQL时,它将按设计工作。 SQL和Windows的系统语言仍然是英语,但使用的格式是荷兰语。
答案 1 :(得分:0)
我在SQL Server中将它用于Datetime2。
Function Get-Datetime2([datetime]$Date = $(Get-Date) ) {
$DT = Get-Date -Date $Date
[string]$DateTime2 = $DT.Month.ToString() + '/'
[string]$DateTime2 += $DT.Day.ToString() + '/'
[string]$DateTime2 += $DT.Year.ToString() + ' '
[string]$DateTime2 += $DT.TimeOfDay.ToString()
return $DateTime2
}
Get-Datetime2
返回看起来像这样的东西。
3/12/2018 03:04:34.7496659
答案 2 :(得分:0)
如果你已经使用过Don Jones的模块,你可能已经熟悉了* .types.ps1xml中的类型扩展......如果我没记错的话,他的模块中也应该有一个。
添加以下类型声明时,
<Type>
<Name>System.DateTime</Name>
<Members>
<ScriptMethod>
<Name>ToString</Name>
<Script>
$(Get-Date $This -Format "yyyy-MM-dd HH:mm:ss")
</Script>
</ScriptMethod>
</Members>
</Type>
您基本上将System.DateTime的ToString()方法覆盖为标准SQL Server安装所需的格式。
通过这种方式,您可以确保每次加载SQL模块日期时都以正确的方式格式化它们。