【发布时间】:2016-11-29 15:40:39
【问题描述】:
问题
在具有en-GB 文化的 Windows 会话中运行时,是否可以强制 PowerShell 以法语格式导出为 CSV?
更多信息
我希望使用法语文化规则将一些数据导出到 CSV(即 CSV 的分隔符设置为分号,但数字也使用逗号作为小数位,以及其他文化格式差异;所以只需使用 -Delimiter 参数还不够)。
我想出了下面的代码(基于https://stackoverflow.com/a/7052955/361842)
function Set-Culture
{
[CmdletBinding(DefaultParameterSetName='ByCode')]
param (
[Parameter(Mandatory,ParameterSetName='ByCode',Position=1)]
[string] $CultureCode
,
[Parameter(Mandatory,ParameterSetName='ByCulture',Position=1)]
[System.Globalization.CultureInfo] $Culture
)
begin {
[System.Globalization.CultureInfo] $Culture = [System.Globalization.CultureInfo]::GetCultureInfo($CultureCode)
}
process {
[System.Threading.Thread]::CurrentThread.CurrentUICulture = $Culture
[System.Threading.Thread]::CurrentThread.CurrentCulture = $Culture
}
}
function Invoke-CommandInCulture {
[CmdletBinding()]
param (
[Parameter(Mandatory,ParameterSetName='ByCode',Position=1)]
[string]$CultureCode
,
[Parameter(Mandatory,Position=2)]
[ScriptBlock]$Code
)
process {
$OriginalCulture = Get-Culture
try
{
Set-Culture $CultureCode
Write-Verbose (Get-Culture) #this always returns en-GB
Invoke-Command -ScriptBlock $Code
}
finally
{
Set-Culture $OriginalCulture
}
}
}
以下代码暗示此方法有效:
Invoke-CommandInCulture -CultureCode 'fr' -Code {
[System.Threading.Thread]::CurrentThread.CurrentUICulture
[System.Threading.Thread]::CurrentThread.CurrentCulture
} #shows that the command's thread's culture is French
Invoke-CommandInCulture -CultureCode 'fr' -Code {
get-date
} #returns the current date in French
但是 PowerShell 对正在发生的事情有自己的想法
Invoke-CommandInCulture -CultureCode 'fr' -Code {
get-culture
"PSCulture: $PSCulture"
"PSUICulture: $PSUICulture"
} #returns my default (en-GB) culture; not the thread's culture
这会影响转换为 CSV 的逻辑:
Invoke-CommandInCulture -CultureCode 'fr' -Code {
get-process | ConvertTo-CSV -UseCulture
} #again, uses my default culture's formatting rules; not the FR ones
【问题讨论】:
-
这篇博客解释了一些奇怪的行为;即在当前管道完成后重置文化;尽管到目前为止我还无法解决
Export-Csv的问题,即使有了这些知识/我看到的行为似乎与此相矛盾...... -
上述博客链接:xipher.dk/WordPress/?p=706
标签: export-to-csv cultureinfo powershell-4.0 uiculture