質問をConvertTo-CSV -UseCultureは、現在のスレッドの文化
を無視することがen-GB
文化とWindowsのセッションで実行したときにフランスの形式でCSVにエクスポートするためのPowerShellを強制することは可能ですか?
詳細
私はフランス文化のルールを使用して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」の問題を回避することはできませんでした。 – JohnLBevan
http:// www .xipher.dk/WordPress /?p = 706 – JohnLBevan