我想使用 powershell 检查多台机器上的数字小数分隔符。如果我get-culture
在本地 powershell 中运行,结果是正确的。它将返回英语(英国)和正确的数字格式,例如小数分隔符“。”。但如果我远程运行该命令:
Invoke-Command -ComputerName $server { (get-culture) }
Invoke-Command -ComputerName $server { (get-culture).NumberFormat.NumberDecimalSeparator}
结果是错误的。它返回的是德语(德国),这是我调用命令的机器的语言。请帮忙。
答案1
您可以检查系统水平文化设置Get-WinSystemLocale
Get-Culture
仅返回用户级文化设置,任何用户都可以设置。正如您所发现的,Powershell 远程处理会自动在会话中应用您的本地文化。您可以使用以下方式指定不同的Culture
和/或UICulture
名称SessionOption
:
Invoke-Command -ComputerName $server -SessionOption @{culture='en-gb'} -ScriptBlock {Get-Culture}
当前正在运行的 powershell 进程的文化$PSCulture
是只读的,无法更改。
如果您需要使用适合远程系统的正确文化来运行远程命令,则可以在开始会话之前进行检查,如下所示:
# check the remote system culture before running script
$remoteCulture = Invoke-Command -ComputerName $server -ScriptBlock {Get-WinSystemLocale}
Invoke-Command -ComputerName $server -SessionOption @{culture=$remoteCulture} -ScriptBlock {
# some command that requires the remote culture
Get-Culture
}
或者,设置从会话启动的新线程/进程的文化:
Invoke-Command -ComputerName $server -ScriptBlock {
[system.threading.thread]::CurrentThread.CurrentCulture = Get-WinSystemLocale
Start-Job {Get-Culture} | Receive-Job -Wait
}