远程执行Get-Culture返回错误结果,如何通过PowerShell批量检查多台机器的数字小数点分隔符?
远程执行Get-Culture返回错误结果,如何通过PowerShell批量检查多台机器的数字小数点分隔符?
我来帮你解决这个问题!其实你遇到的情况是PowerShell远程会话的一个默认行为导致的:默认情况下,WinRM远程会话会继承你本地机器的文化(Culture)设置,而不是使用远程目标机器的系统默认文化。所以你远程执行Get-Culture时,拿到的其实是你本地的German(Germany)设置,而不是远程机器的真实配置。
下面给你两种实用的解决方案,帮你正确获取远程机器的数字小数点分隔符,还支持批量操作:
方法一:直接获取远程机器的系统默认文化
这种方法不需要修改远程会话的文化设置,直接读取远程机器的系统级文化配置:
# 定义要检查的服务器列表 $servers = "Server01", "Server02", "Server03" # 批量执行远程命令,返回结构化结果 Invoke-Command -ComputerName $servers -ScriptBlock { # 获取远程机器的系统默认文化 $systemCulture = [System.Globalization.CultureInfo]::InstalledUICulture # 构造返回对象,方便查看结果 [PSCustomObject]@{ ComputerName = $env:COMPUTERNAME CultureName = $systemCulture.Name CultureDisplayName = $systemCulture.DisplayName DecimalSeparator = $systemCulture.NumberFormat.NumberDecimalSeparator } } | Select-Object ComputerName, CultureName, CultureDisplayName, DecimalSeparator
执行后你会得到每台机器的详细信息,包括小数点分隔符,完全是远程机器的真实配置。
方法二:修改远程会话的线程文化再获取
如果你还是想用Get-Culture命令来获取,可以先在远程脚本块里把当前线程的文化设置为远程机器的默认文化,再执行查询:
Invoke-Command -ComputerName $server -ScriptBlock { # 设置远程会话的线程文化为机器默认文化 [System.Globalization.CultureInfo]::DefaultThreadCurrentCulture = [System.Globalization.CultureInfo]::InstalledUICulture # 现在Get-Culture返回的就是远程机器的配置了 (Get-Culture).NumberFormat.NumberDecimalSeparator }
额外提醒
- 确保你对目标远程机器有管理员权限,并且远程机器已经启用并配置好WinRM服务(可以用
Enable-PSRemoting命令提前配置)。 - 如果要批量处理,直接把
$server换成服务器列表数组即可,PowerShell会自动并行执行远程命令。
备注:内容来源于stack exchange,提问作者Jade May
相关产品推荐
相关产品推荐

