Powershell 将Win32_OperatingSystem的CountryCode转换为国家/地区字符串

Powershell 将Win32_OperatingSystem的CountryCode转换为国家/地区字符串,powershell,wmi,Powershell,Wmi,我们正在尝试将中的CountryCode转换为人类可读的字符串 代码: $OS = Get-CimInstance -ClassName Win32_OperatingSystem $OS | Select-Object CountryCode, OSLanguage, @{N = 'OSDefaultLanguage'; E = {New-Object System.Globalization.CultureInfo([Int]$_.OSLanguage)}}, @{N =

我们正在尝试将中的
CountryCode
转换为人类可读的
字符串

代码:

$OS = Get-CimInstance -ClassName Win32_OperatingSystem

$OS | Select-Object CountryCode, OSLanguage, 
    @{N = 'OSDefaultLanguage'; E = {New-Object System.Globalization.CultureInfo([Int]$_.OSLanguage)}},
    @{N = 'OSCountryCode'; E = {New-Object System.Globalization.CultureInfo([Int]$_.CountryCode)}}
在上面的示例中,属性
OSCountryCode
是我们所需要的。但它返回值
ar
,即
阿根廷
,但它应根据for值
1
返回
美国


如何将值
1
正确转换为
US
或类似值?

CountryCode
是关联国家/地区的国家/地区呼叫代码(电话号码路由前缀)。您需要查询外部API以将调用代码转换为国家/地区名称,或者不使用WMI并检索
[Globalization.RegionInfo]::CurrentRegion.TwoLetterISORegionName
(您可以通过其他计算机的PowerShell远程处理来执行此操作)。当我在另一台机器上运行@jeroenmoster建议的代码时,它总是返回我自己的国家,而不是远程机器的国家(例如1=US,32=BE)。是否有一种方法可以转换类
Win32\u OperatingSystem
?Thx@iRon的值,但这并不是真正需要的。我们正在寻找将
CountryCode
an
[int]
CountryName
a
[String]
@DarkLite1匹配,对不起,我错过了,我已经相应地更改了答案(并添加了国家名称。@iRon很抱歉造成混淆,但它没有将
$OS.CountryCode
转换为两个字母的国家名称。
$OS.CountryCode
$OS.OSLanguage
不同。给定的系统可以使用OS语言x和国家Y。这意味着,如果需要,您将获得多个结果。)将一种语言转换为一个国家(例如荷兰和比利时都讲荷兰语),也可以将另一种语言转换为另一个国家(例如比利时他们讲法语,我没有资源来确认这一点,但我认为您需要在系统帐户下运行
Get CimInstance-ClassName Win32_OperatingSystem
,以获取系统的OSLanguage/LCID()。如果这对您不起作用,则您可能必须构建硬编码引用或从外部获取引用,请参阅:
$OS = Get-CimInstance -ClassName Win32_OperatingSystem

$Culture = [System.Globalization.CultureInfo]::GetCultures("SpecificCultures") | Where {$_.LCID -eq $OS.OSLanguage}
$RegionInfo = New-Object System.Globalization.RegionInfo $Culture.Name

$OS | Select-Object CountryCode, OSLanguage, 
    @{N = 'OSDefaultLanguage'; E = {New-Object System.Globalization.CultureInfo([Int]$_.OSLanguage)}},
    @{N = 'OSCountryCode'; E = {$RegionInfo.TwoLetterISORegionName}},
    @{N = 'OSCountryName'; E = {$RegionInfo.DisplayName}}